Как назначить результат exec переменной sql? - PullRequest
89 голосов
/ 11 февраля 2010

Как назначить результат вызова exec переменной в SQL? У меня есть сохраненный процесс с именем up_GetBusinessDay, который возвращает одну дату.

Можете ли вы сделать что-то вроде этого:

exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

Ответы [ 4 ]

84 голосов
/ 11 февраля 2010

Я всегда использую возвращаемое значение для возврата статуса ошибки. Если вам нужно вернуть одно значение, я бы использовал выходной параметр.

образец хранимой процедуры с параметром 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

вызов хранимой процедуры с параметром OUTPUT:

DECLARE @OutputParameter  datetime
       ,@ReturnValue      int

EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)

ВЫВОД:

0
2010-01-01 00:00:00.000
48 голосов
/ 14 ноября 2012

Это будет работать, если вы хотите просто вернуть целое число:

DECLARE @ResultForPos INT 
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
27 голосов
/ 25 августа 2016
declare @EventId int

CREATE TABLE #EventId (EventId int)

insert into #EventId exec rptInputEventId

set @EventId = (select * from #EventId)

drop table #EventId 
6 голосов
/ 11 февраля 2010

Из документации (при условии, что вы используете SQL-сервер):

USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO

Так что да, так и должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...