6

私はいくつかの値を計算しSELECTてそれらをsするストアドプロシージャを持っています:

CREATE PROCEDURE [dbo].[MyProc]
AS
   DECLARE @value1 int;
   DECLARE @value2 int;
   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...
   SELECT @value1 AS Value1, @value2 AS Value2;
RETURN 0;

私はそれをテーブル関数に変えることができることを知っていますがRETURN、途中で何も返さないことがあるので、それをしたくありません。

そのストアド プロシージャを別のストアド プロシージャから呼び出し、取得した値を別のプロシージャで使用したいと考えていSELECTます。それ、どうやったら出来るの?

4

2 に答える 2

3

誘惑を作成し、そこに両方の​​値を挿入できます。

CREATE TABLE #Temp (value1 int, value2 int)

INSERT INTO #Temp (value1, value2)
EXEC [dbo].[MyProc]

Value1がNULLの場合、#Tempにレコードはありません。この場合、0を返す必要はありません。

ただし、それが目標ではなく、0を返す必要がある場合は、@value1と@value2を出力パラメーターとして使用する必要があります。

于 2012-09-13T08:26:10.043 に答える
2

出力パラメーターを追加できます。

CREATE PROCEDURE [dbo].[MyProc]
(
  @value1 int = null output,
  @value2 int = null output
)
AS

   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...
   SELECT @value1 = Value1, 
          @value2 = Value2;
RETURN 0;

そしてそれを使用します:

declare @v1 int, 
        @v2 int

exec MyProc @v1 out, @v2 out

select @v1, @v2

または、さらに値が必要な場合は、一時テーブルを使用できます

create table #tmp
(
  val1 int null,
  val2 int null 
)

CREATE PROCEDURE [dbo].[MyProc]   
AS

   SET @value1 =...
   IF( @value1 IS NULL ) 
       RETURN 0;
   SET @value2 =...

   insert into #tmp
   SELECT Value1, Value2
   from tab

RETURN 0;

そしてそれを使用します:

create table #tmp
(
  val1 int null,
  val2 int null 
)

exec MyProc 

select *
from #tmp

drop table #tmp
于 2012-09-13T08:24:14.827 に答える