Ответы:
Я всегда использую возвращаемое значение, чтобы передать статус ошибки. Если вам нужно передать одно значение, я бы использовал выходной параметр.
образец хранимой процедуры с параметром 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
Это сработает, если вы хотите просто вернуть целое число:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
был просто примером, RETURN
предназначен для работы только с целыми значениями, см. Документацию . Рекомендуемый способ получения других данных от SP - либо вернуть набор результатов, либо использоватьOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Из документации (при условии, что вы используете SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Так что да, так должно работать.
У меня такой же вопрос. Хотя здесь есть хорошие ответы, я решил создать функцию с табличным значением. С функцией с табличным (или скалярным) значением вам не нужно изменять сохраненную процедуру. Я просто сделал выбор из функции с табличным значением. Обратите внимание, что параметр (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;