1

テーブル値パラメーターに関するメモを読み始めました

これらの TVP は、入力パラメーターおよび出力パラメーターとして使用できますか?
それらを出力パラメーターとして使用することに意味はありますか?
あるストアド プロシージャからの出力として TVP を取得し、それを別のストアド プロシージャにフィードすることは可能でしょうか?
最初の sproc を呼び出してから、最初の出力 TVP を使用して 2 番目の sproc を呼び出すスクリプトの構文は、ちょっとわかりません。

編集

私の投稿の混乱をお詫びします - 最初の手順の結果を TVP に入れる必要があるようです - TVP はその sproc に関与する必要があると思いまし。したがって、私が話していたことのモデルは次のとおりです-うまくいけば、TVPの有効な使用...

CREATE TYPE myfirstTVP AS TABLE (id INT NOT NULL PRIMARY KEY);

GO --<<this sproc will find the ids (+ other fields) that need to be investigated
    CREATE PROC test1 as
        SELECT 1 UNION 
        SELECT 2 UNION
        SELECT 3;
GO

GO --<<this sproc uses the found ids to do one aspect of the investigation
    CREATE PROC test2 
    @t2 myfirstTVP READONLY 
    AS
            SELECT id*2 
            FROM @t2;
GO

GO --<<this sproc uses the found ids to do another aspect of the investigation
    CREATE PROC test3 
    @t4 myfirstTVP READONLY 
    AS
            SELECT id*3 
            FROM @t4;
GO    

    --<<this is where the TVP is used and the sprocs are called 
    DECLARE @t3 myfirstTVP ;
    INSERT INTO @t3 
    EXEC test1;

    EXEC test2 @t3;
    EXEC test3 @t3;
4

2 に答える 2

2

あなたが達成したいことを100%確信しているわけではありませんが、ある意味で「出力」パラメーターの動作をエミュレートできます。

CREATE TYPE LIST_OF_INT AS TABLE (id int not null primary key);
GO
create procedure test1 as
begin
  declare @t1 LIST_OF_INT;
  insert into @t1 (id) values (1);
  select * from @t1;
end;

GO

declare @t2 LIST_OF_INT ;
insert into @t2 
EXEC test1;

select * from @t2;
于 2012-09-17T15:06:59.400 に答える
1

あなたが引用したMSDNリンクからこのビットを見逃したと思います。

テーブル値パラメーターは、入力 READONLY パラメーターとして Transact-SQL ルーチンに渡す必要があります。

于 2012-09-17T14:58:54.450 に答える