1

SQL Serverで@tableVariableを返したり出力したりすることは可能ですか?
たとえば、次のストアドプロシージャの場合、@ TSVテーブル変数を返すにはどうすればよいですか?

ALTER PROCEDURE MyStoredProdecure
    @Parameter1 INT,
    @Parameter2 INT
AS
   BEGIN

   DECLARE @TSV TABLE
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

   INSERT INTO @TSV
   { some data }

END
4

3 に答える 3

1

直接行うことはできません。テーブル変数は、READONLY入力に対して有効です。

ストアドプロシージャから返される他のデータがない場合は、最後に@TSVから選択して、呼び出し元に出力をキャプチャさせることができます。

ALTER PROCEDURE MyStoredProdecure
    @Parameter1 INT,
    @Parameter2 INT
AS
   BEGIN

   DECLARE @TSV TABLE
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

   INSERT INTO @TSV
   { some data }

   SELECT * FROM @TSV
END

発信者

DECLARE @outerTSV TABLE
(
   Transition_Set_Variable_ID INT,
   Passed BIT
);
insert into @outerTSV
exec MyStoredProdecure 1, 2;

または、SPが実際に示したように単純な場合は、代わりにテーブル値関数に変換します。

于 2012-11-30T11:12:56.130 に答える
1

いいえ。ただしtable valued function、テーブルを返すaを記述できます。

create function MyTVF
    @Parameter1 INT,
    @Parameter2 INT
returns @tsv table
   (
      Transition_Set_Variable_ID INT,
      Passed BIT
   )

AS
   BEGIN
   INSERT INTO @TSV
   { some data }
   return 
END
于 2012-11-30T11:15:54.623 に答える
1

テーブル値パラメーターは、出力ではなく入力にのみ使用できます。

最終目標に応じて、次のオプションがあります。

  1. sprocをテーブル値関数に変更してTABLEを返します。これは、別のステートメントでインラインで使用できます。

  2. sprocの最後にある@TSVテーブル変数からデータを選択するだけです

  3. XML OUTPUTパラメーターを返します(これを示唆する汚い感じがしますが、実際にOUTPUTパラメーターを使用して複数の行を返す1つの方法を強調するだけです)

テーブル値関数を使用する場合、理想的には、次のように単純な場合はインライン関数を作成します。

例えば

CREATE FUNCTION dbo.Func() 
RETURNS TABLE 
AS
RETURN
(
    SELECT Something
    FROM Somewhere
    WHERE x = 1
)
于 2012-11-30T11:16:31.037 に答える