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

dgtucam1  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(748)

我有一张table 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

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

o2gm4chl

o2gm4chl1#

当您更新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

相关问题