And*_*ton 5 trigger sql-server
如果我们收到一条不检查 where 子句中的值是否已更改的更新语句,那么在触发器中忽略该更新的不同方法是什么?
我知道我们可以对每个单独的字段进行比较(也可以处理 ISNULL 端),但是如果它是一个包含 50 多个字段的表,是否有更快/更简单的方法来做到这一点?
注意:这可用于减少审计记录等中的 IO/噪音...
例子
对于表:
CREATE TABLE myTest
(ID int NOT NULL IDENTITY(1,1),
Field1 varchar(10) NULL,
Field2 varchar(20) NULL)
Run Code Online (Sandbox Code Playgroud)
带有更新程序后触发器,其中包含:
INSERT INTO myTestAudit (ID, Field1, Field2, DateTimeUpdate)
SELECT ID, Field1, Field2, getDate()
FROM inserted
Run Code Online (Sandbox Code Playgroud)
初始值:
INSERT INTO myTest (Field1, Field2)
SELECT 'a', 'b' UNION ALL
SELECT 'a', 'c'
Run Code Online (Sandbox Code Playgroud)
现在运行更新:
UPDATE myTest set Field2 = 'b' WHERE Field1 = 'a'
Run Code Online (Sandbox Code Playgroud)
要恢复至少一个值已更改的行,您可以使用
SELECT /*TODO: Column List*/
FROM INSERTED I
JOIN DELETED D
ON I.ID = D.ID
AND EXISTS (SELECT I.*
EXCEPT
SELECT D.*)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10981 次 |
最近记录: |