Відповіді:
Я завжди використовую значення повернення для передачі статусу помилки назад. Якщо вам потрібно повернути одне значення, я б використовував вихідний параметр.
зразок збереженої процедури з параметром 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
.
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
З документації (якщо використовувати SQL-сервер):
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;