我有一个表值类型作为存储过程的参数,其中包含多达数千行。我对这个存储过程执行了几个操作(当前是一个 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>
或者是其他东西?