sql - 如何在 SQL Server 的触发器中获取多个字段的旧值和新值?
问题描述
我有一张桌子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 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
推荐阅读
- typescript - 将 combineAll 与 2 个可观察对象一起使用时 RxJS 缺失值
- gitlab - 如何仅发送 GitLab 计划管道失败电子邮件?
- javascript - 将附加参数传递给 Node JS 中的下载器助手事件的问题
- c# - 无法将 Nethereum 与 Infura 连接
- c# - 按关键字排序字符串
- node.js - 如何在自定义 URL 上运行 Laravel mix?
- bluetooth - 如何实现两个设备的BLE通信?
- mysql - 如何加快这个“最近的记录”mySQL 查询
- javascript - JSON解析变量结果
- tensorflow - 如何在 Tensorflow 对象检测 API 中初始化卷积层的权重?