ストアドプロシージャ内からストアドプロシージャに渡すユーザー定義テーブルがあります。
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
exec ValidateInputXML SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
これでエラーは発生しませんが、ValidateInputXMLを使用してselect fromを実行すると、テーブルにデータがありません。
ストアドプロシージャにTable-Valuedパラメータを使用することもできます。例えば。
/* Create a table type. */
CREATE TYPE MyTableType AS TABLE
( Column1 VARCHAR(50)
, ........ );
GO
/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE dbo. ValidateInputXML
@TVP MyTableType READONLY
AS
-- Do what ever you want to do with the table received from caller
GO
/* Declare a variable that references the type. */
DECLARE @myTable AS MyTableType;
-- Fill @myTable with data and send it to SP.
insert into @myTable SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
/* Pass the table variable data to a stored procedure. */
EXEC ValidateInputXML @myTable ;
GO
ユーザー定義テーブルのスコープは、ストアドプロシージャにあります。ストアドプロシージャが実行されると、テーブル@tmpInput
が作成されて入力され、その後はアクセスできなくなります。
ドキュメントから:
変数のスコープは、宣言された時点から、宣言されたバッチまたはストアドプロシージャの終わりまで続きます。
2つのオプションがあります。
オプション1:
レコードを永続的に保存できるテーブルを作成します。
オプション2:
select
次のようなストアドプロシージャ内のレコード:
alter procedure ValidateInputXML
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
その後
exec ValidateInputXML