Подтвердить что ты не робот

Как назначить результат exec для переменной sql?

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

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

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

Ответ 1

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

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

Ответ 2

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

DECLARE @ResultForPos INT 
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos

Ответ 3

declare @EventId int

CREATE TABLE #EventId (EventId int)

insert into #EventId exec rptInputEventId

set @EventId = (select * from #EventId)

drop table #EventId 

Ответ 4

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

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

Итак, да, это должно сработать.

Ответ 5

У меня такой же вопрос. Хотя здесь есть хорошие ответы, я решил создать табличную функцию. При использовании табличной (или скалярной) функции вам не нужно менять сохраненный процесс. Я просто сделал выбор из табличной функции. Обратите внимание, что параметр (MyParameter является необязательным).

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;
)

Чтобы присвоить свою переменную, вы можете просто сделать что-то вроде:

Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));

Вы также можете использовать скалярную функцию:

CREATE FUNCTION TestDateFunction()  
RETURNS datetime  
BEGIN  
    RETURN (SELECT GetDate());
END

Тогда вы можете просто сделать

Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;