【发布时间】:2015-05-19 19:25:03
【问题描述】:
PFB scipts
Step-1(审核表)
CREATE TABLE AuditTest
(
ID INT
,col1 NVARCHAR(MAX)
,col2 NVARCHAR(MAX)
,col3 NVARCHAR(MAX)
,col4 NVARCHAR(MAX)
,[Action] VARCHAR(10)
,[Date] DATETIME DEFAULT GETDATE()
)
Step-2(交易表)
CREATE TABLE Test11
(
ID INT IDENTITY
,col1 NVARCHAR(MAX)
,col2 NVARCHAR(MAX)
,col3 NVARCHAR(MAX)
,col4 NVARCHAR(MAX)
)
Step-3(事务表上的更新触发器)
CREATE TRIGGER trgAudit ON Test11
AFTER UPDATE
AS
BEGIN
INSERT INTO AuditTest(ID
,col1
,col2
,col3
,col4
,[Action]
)
SELECT d.ID,d.col1,d.col2,d.col3,d.col4,'o' FROM DELETED d
INSERT INTO AuditTest(ID
,col1
,col2
,col3
,col4
,[Action]
)
SELECT i.ID,i.col1,i.col2,i.col3,i.col4,'n' FROM INSERTED i
END
Step-4(插入和更新事务表)
insert into Test11
select 'a','a','a','a'
UPDATE Test11
SET col1 = 'b'
WHERE ID = 1
UPDATE Test11
SET col2 = 'z'
WHERE ID = 1
需要从表 AuditTest 中选择所有新记录(WHERE ACTION = 'N') 如果仅对“COL1”列进行任何更新
注意:不要在触发器中添加任何脚本。
提前致谢, 阿尼尔
【问题讨论】:
-
如果您希望在 AuditTest 表中添加一个作为审计顺序标识的新字段,那么您可以与之前的审计记录进行比较,并查看列中的特定值是否已更改。在这种情况下,我总是执行以下一项或两项操作...将触发代码更改为仅对某些更改进行插入,或者添加新的操作代码,以便将更新的列隐藏在操作代码中。 n1 n2 n3 n4 n24 n14 n0
标签: sql-server sql-server-2012