Respostas:
Eu sempre uso o valor de retorno para passar de volta o status de erro. Se você precisar retornar um valor, eu usaria um parâmetro de saída.
procedimento armazenado de amostra, com um parâmetro OUTPUT:
CREATE PROCEDURE YourStoredProcedure
(
@Param1 int
,@Param2 varchar(5)
,@Param3 datetime OUTPUT
)
AS
IF ISNULL(@Param1,0)>5
BEGIN
SET @Param3=GETDATE()
END
ELSE
BEGIN
SET @Param3='1/1/2010'
END
RETURN 0
GO
chamada para o procedimento armazenado, com um parâmetro OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
RESULTADO:
0
2010-01-01 00:00:00.000
Isso funcionará se você quiser simplesmente retornar um número inteiro:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
foi apenas um exemplo, RETURN
foi projetado para funcionar apenas com valores inteiros, consulte a documentação . A maneira recomendada de obter outros dados de um SP é retornar um conjunto de resultados ou usarOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
A partir da documentação (supondo que você use o SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Então, sim, deve funcionar dessa forma.
Eu tive a mesma pergunta. Embora haja boas respostas aqui, decidi criar uma função com valor de tabela. Com uma função com valor de tabela (ou escalar), você não precisa alterar o procedimento armazenado. Eu simplesmente fiz uma seleção na função com valor de tabela. Observe que o parâmetro (MyParameter é opcional).
CREATE FUNCTION [dbo].[MyDateFunction]
(@MyParameter varchar(max))
RETURNS TABLE
AS
RETURN
(
--- Query your table or view or whatever and select the results.
SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)
Para atribuir à sua variável, você simplesmente pode fazer algo como:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Você também pode usar uma função de valor escalar:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Então você pode simplesmente fazer
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;