這裏是我的查詢:如何限制MERGE語句中的OUTPUT子句的操作?
MERGE INTO [payments_orders] o USING (
SELECT 1 AS [order_id], 50.00 AS [amount] UNION ALL
SELECT 2 AS [order_id], 50.00 AS [amount]
) AS t ([order_id], [amount])
ON o.[payment_id] = 4 AND o.[order_id] = t.[order_id]
WHEN MATCHED THEN UPDATE SET o.[amount] = t.[amount]
WHEN NOT MATCHED THEN INSERT ([payment_id], [order_id], [amount])
VALUES (4, t.[order_id], t.[amount])
WHEN NOT MATCHED BY SOURCE AND o.[payment_id] = 4 THEN DELETE
OUTPUT $ACTION AS [action], [deleted].[order_id];
我運行一個MERGE語句插入或爲了記錄與付款記錄,以及如何支付分配相關的更新。
我想做什麼是在末尾加WHERE $ACTION = 'DELETE'
;但是這不起作用。顯然你不能在OUTPUT
子句中使用WHERE
子句;那是「不正確的語法」。
我該如何做到這一點,從這條語句輸出的唯一行是由DELETE
觸發的?
您可能有更好的運氣保持它們作爲單獨的語句。無論如何,你當前的代碼並不能保護你不受併發/競爭條件的影響。 [請閱讀本文](http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/)。 –
@AaronBertrand,謝謝你。我從來沒有讀過它(從來沒有使用太多MERGE) –