ストアドプロシージャのパラメータとしてテーブル値型があり、最大数千行が含まれています。このストアドプロシージャ(現在はMERGEとINSERT)に対していくつかの操作を実行しますが、それらの前に、述語でパラメーターの内容をフィルター処理します。
@data TableValuedType READONLY
MERGE INTO Table2
USING (
SELECT ... FROM @data
UNION
SELECT ... FROM @data
UNION
...)
ON ...
WHEN NOT MATCHED THEN ....
INSERT INTO Table3
SELECT ... FROM @data
これを行う最も効率的な方法は、テーブルタイプの別の変数を宣言し、その変数に挿入してから、その変数を使用してマージして挿入する方法です。
DECLARE @sanitisedData TableValuedType
INSERT INTO @sanitisedData
SELECT ... FROM @data
WHERE <predicate>
または、@ dataから何かを選択するたびに述語を使用するには:
MERGE INTO Table2
USING (
SELECT ... FROM @data WHERE <predicate>
UNION
SELECT ... FROM @data WHERE <predicate>
UNION
...)
ON ...
WHEN NOT MATCHED THEN ....
INSERT INTO Table3
SELECT ... FROM @data WHERE <predicate>
または、他の何か?