如何在 SQL Server 的触发器中获取多个字段的旧值和新值?
Posted
技术标签:
【中文标题】如何在 SQL Server 的触发器中获取多个字段的旧值和新值?【英文标题】:How to get old value and new value of multiple field in trigger in SQL server? 【发布时间】:2020-09-07 00:50:48 【问题描述】:我有一张桌子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
当我在两种情况下都使用上述命令时,我想要旧值和当前值并将其存储在另一个表中。我们如何使用触发器来实现这一点?
【问题讨论】:
简单 - 在AFTER INSERT
触发器上写入,另一个AFTER UPDATE
- 请参阅the official MS docs 了解如何执行此操作
【参考方案1】:
对于你更新时的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
【讨论】:
以上是关于如何在 SQL Server 的触发器中获取多个字段的旧值和新值?的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 建立的触发器子查询返回值不唯一,需要用多个返回值如何操作