Как назначить результат exec для переменной sql?
Как вы назначаете результат вызова exec переменной в SQL? У меня есть хранимый процесс под названием up_GetBusinessDay
, который возвращает одну дату.
Можете ли вы сделать что-то вроде этого:
exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1
Ответы
Ответ 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;