回答:
私は常にエラー値を返すために戻り値を使用しています。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
これは単に整数を返したい場合に機能します:
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-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;