でテーブル値パラメータのデータをフィルタリングします。私は、このストアドプロシージャ(現在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>
など
最初にフィルタリングされたデータセットを渡すことはできませんか? – Oded
いいえ、フィルタリングを行う条件はサーバー上にのみ存在します – thecoop
渡されたTVPを使用して結合を行っていますか? – Oded