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 subseqüentes 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 ContactID que não correspondeu a uma linha).
USE AdventureWorks;
GO
CREATE PROCEDURE checkstate @param varchar(11)
AS
IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE ContactID = @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 '2';
SELECT 'Return Status' = @return_status;
GO
Conjunto de resultados.
Return Status
-------------
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
Conjunto de resultados.
Return Status
-------------
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
Conjunto de resultados.
Return Status
-------------
2