RETURN (Transact-SQL)
Sai incondicionalmente de uma consulta ou procedimento. RETURN é imediato e completo, podendo ser usado em qualquer ponto para sair de um procedimento, lote ou bloco de instruções. As instruções posteriores a RETURN não são executadas.
Sintaxe
RETURN [ integer_expression ]
Argumentos
- integer_expression
É o valor inteiro que é retornado. Os procedimentos armazenados podem retornar um valor inteiro a um procedimento de chamada ou um aplicativo.
Tipos de retorno
Opcionalmente, retorna int.
Observação |
---|
A menos que seja documentado o contrário, todos os procedimentos armazenados de sistema retornam o valor 0. Isto indica sucesso e um valor diferente de zero indica falha. |
Comentários
Quando usado com um procedimento armazenado, RETURN não pode retornar um valor nulo. Se um procedimento tentar retornar um valor nulo (por exemplo, usando RETURN @status quando @status for NULL), será gerada uma mensagem de aviso e o valor 0 será retornado.
O valor do status de retorno pode ser incluído em instruções Transact-SQL subsequentes no lote ou no procedimento que executou o procedimento atual, mas ele deve ser inserido no seguinte formato: EXECUTE @return_status = <procedure_name>.
Exemplos
A. Retornando de um procedimento
O exemplo a seguir mostra que se nenhum nome de usuário estiver especificado como um parâmetro quando findjobs for executado, RETURN fará com que o procedimento seja encerrado depois que uma mensagem for enviada à tela do usuário. Se um nome de usuário for especificado, os nomes de todos os objetos criados por esse usuário no banco de dados atual serão recuperados das tabelas do sistema apropriadas.
CREATE PROCEDURE findjobs @nm sysname = NULL
AS
IF @nm IS NULL
BEGIN
PRINT 'You must give a user name'
RETURN
END
ELSE
BEGIN
SELECT o.name, o.id, o.uid
FROM sysobjects o INNER JOIN master..syslogins l
ON o.uid = l.sid
WHERE l.name = @nm
END;
B. Retornando códigos de status
O exemplo a seguir verifica o estado do ID de um contato especificado. Se o estado for Washington (WA), um status 1 será retornado. Caso contrário, 2 será retornado para qualquer outra condição (um valor diferente de WA para StateProvince ou BusinessEntityID que não correspondeu a uma linha).
USE AdventureWorks2008R2;
GO
CREATE PROCEDURE checkstate @param varchar(11)
AS
IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE BusinessEntityID = @param) = 'WA'
RETURN 1
ELSE
RETURN 2;
GO
Os exemplos a seguir mostram o status de retorno da execução de checkstate. O primeiro mostra um contato em Washington; o segundo, um contato que não é de Washington; e o terceiro, um contato que não é válido. A variável local @return_status deve ser declarada antes que possa ser usada.
DECLARE @return_status int;
EXEC @return_status = checkstate '291';
SELECT 'Return Status' = @return_status;
GO
Aqui está o conjunto de resultados.
Status de retorno
-------------
1
Executar a consulta novamente, especificando um número de contato diferente.
DECLARE @return_status int;
EXEC @return_status = checkstate '6';
SELECT 'Return Status' = @return_status;
GO
Aqui está o conjunto de resultados.
Status de retorno
-------------
2
Executar a consulta novamente, especificando outro número de contato.
DECLARE @return_status int
EXEC @return_status = checkstate '12345678901';
SELECT 'Return Status' = @return_status;
GO
Aqui está o conjunto de resultados.
Status de retorno
-------------
2