【问题标题】:SQL Server compare values of two rows of same table and get not matching column namesSQL Server比较同一个表的两行的值并得到不匹配的列名
【发布时间】:2015-09-21 08:17:47
【问题描述】:

我需要比较同一张表的两行(INSERTED & DELETED)并比较值。然后我需要获取不匹配的列。在触发器内部。

到目前为止我已经尝试过,但我不知道如何比较这两行并获取包含不同值的列名。

SELECT * 
FROM inserted i
INNER JOIN deleted d ON d.PurchasingDocItemNo = i.PurchasingDocItemNo 
                     AND d.PurchasingDocNo = i.PurchasingDocNo
                     AND d.ReferenceDocumentNo = i.ReferenceDocumentNo
                     AND d.ProductNo = i.ProductNo

【问题讨论】:

  • 您可以在其他可能不同的字段中添加 WHERE 条件,或者使用 Sql Server CdC 或更改跟踪
  • 那么,您正在寻找一种方法来获取更新语句更改的列的名称?阅读columns_updated。示例here 和there。

标签: sql sql-server tsql triggers


【解决方案1】:

将您的选择更改为:

SELECT
-- For each column you're checking.  Also account for ISNull if you need to
CASE WHEN I.Col1 = D.Col1 THEN 0 ELSE 1 END AS Col1Changed.......
FROM INSERTED I
INNER JOIN DELETED D on (I.<PK> = D.<PK>)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多