簡體   English   中英

如何使用 SQL MERGE 語句檢索 OUTPUT 子句中的舊值

[英]How to retrieve old values in OUTPUT clause with SQL MERGE statement

我正在使用 MERGE 語句來更新包含(Name="a", Description="desca")的產品表。 我的源表包含(Name="a", Description="newdesca")並且我在名稱字段上合並。

在我的輸出子句中,我想在更新之前取回該字段 -> Description = "desca"

我找不到辦法做到這一點,我總是取回新值("newdesca") 為什么?

你能不能只使用deleted的內存駐留表。 例如:

IF OBJECT_ID(N'tempdb..#T', 'U') IS NOT NULL
    DROP TABLE #T;

CREATE TABLE #T (Name VARCHAR(5), Description VARCHAR(20));
INSERT #T (Name, Description)
VALUES ('a', 'desca'), ('b', 'delete');

MERGE #T AS t
USING (VALUES ('a', 'newdesca'), ('c', 'insert')) AS m (Name, Description)
    ON t.Name = m.Name
WHEN MATCHED THEN 
    UPDATE SET Description = m.Description
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (Name, Description)
    VALUES (m.Name, m.Description)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE
OUTPUT $Action, inserted.*, deleted.*;

IF OBJECT_ID(N'tempdb..#T', 'U') IS NOT NULL
    DROP TABLE #T;

其輸出將是:

$Action | Name  | Description | Name | Description
--------+-------+-------------+------+--------------
INSERT  |   c   |   insert    | NULL | NULL
UPDATE  |   a   |  newdesca   | a    | desca
DELETE  | NULL  |    NULL     | b    | delete

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM