如何在SQL Server的触发器中获取多个字段的旧值和新值?

问题描述 投票:0回答:1

我有一个表Person

CREATE TABLE Person
(
    ID INT PRIMARY KEY,
    FirstName varchar(50),
    LastName varchar(50),
    Phone varchar(50),
    Address varchar(50),
    City varchar(50),
    PinCode varchar(50),
    DateOfBirth DATETIME,
    UpdatedOn DATETIME,
    UpdatedBy varchar(50)
)

每当我插入或更新上表中的多个字段时,我都希望所有已更新字段的先前值和当前值,并使用触发器将其存储在另一个表中。我们如何获取所有更新字段的值。

例如

INSERT INTO Person 
VALUES (1, 'first', 'last', '11111', 'add', 'city', 'pin', GETDATE(), GETDATE(), 'ABC')

UPDATE Person
SET FirstName = 'First11', 
    LastName = 'Last22', 
    Phone = '1010101010'
WHERE id = 1

[在两种情况下我都将击上述命令时,我想要旧的和当前的值并将其存储在另一个表中。我们如何使用触发器来实现这一目标?

sql sql-server triggers audit-tables
1个回答
0
投票

对于更新时的SQL Server(他删除了旧值,然后插入新值)

   ALTER TRIGGER [dbo].[YOUR_TRIGGER_NAME_INSERT]
   ON  [dbo].[YOUR_TABLE] 
   AFTER INSERT --Here when you insered rows
   AS 
   BEGIN
        select * from inserted --get all inserted rows  
        --Your code
   END

和更新

   ALTER TRIGGER [dbo].[YOUR_TRIGGER_NAME_UPDATE] 
   ON  [dbo].[YOUR_TABLE] 
   AFTER UPDATE--Here when you updated rows
   AS 
   BEGIN
        select * from inserted --get all inserted (new values) rows 
        select * from deleted--get all deleted (old values) rows    
        --Your code
   END
© www.soinside.com 2019 - 2024. All rights reserved.