Tsql 在每次插入、删除时记录更改的触发器
我尝试创建一个触发器:Tsql 在每次插入、删除时记录更改的触发器,tsql,sql-server-2008,Tsql,Sql Server 2008,我尝试创建一个触发器: CREATE TRIGGER DataTrigger ON Data AFTER INSERT , DELETE AS BEGIN IF EXISTS(SELECT * FROM Inserted) INSERT INTO [dbo].[AuditTrail] ([ActionType] ,[TableName] ,[Name] ,[Time]) ('INSERT' //Incorrect syntax ne
CREATE TRIGGER DataTrigger ON Data AFTER INSERT , DELETE
AS
BEGIN
IF EXISTS(SELECT * FROM Inserted)
INSERT INTO [dbo].[AuditTrail]
([ActionType]
,[TableName]
,[Name]
,[Time])
('INSERT' //Incorrect syntax near 'INSERT'
,'Data'
,SELECT col1 FROM Inserted
,CURRENT_TIMESTAMP //Incorrect syntax near the keyword 'CURRENT_TIMESTAMP')
END
但它一直说我有这些错误,有人能告诉我哪里做错了吗?
P/S:检测更新的最佳方法是什么?
多谢各位
CREATE TRIGGER DataTrigger ON Data AFTER INSERT , DELETE
AS
BEGIN
INSERT INTO [dbo].[AuditTrail]
([ActionType]
,[TableName]
,[Name]
,[Time])
SELECT 'INSERT', 'Data', col1, CURRENT_TIMESTAMP FROM Inserted
END
我只是想澄清一下
如果插入了多行,如果语法正确,则查询将失败,上述版本允许多次插入
IF EXISTS是冗余的,这就是它被删除的原因,如果没有行,则不会插入到审核表中
如果要审核DELETE,则需要再次使用类似的语句,但使用的是已删除的表,而不是插入的表
若要审核更新,请创建一个新触发器。对于每个更新行,您都会在中插入一个条目(包含新更新)和在中删除一个条目(包含旧数据),如果您希望跟踪新旧数据,可以将它们合并
我只是想澄清一下
如果插入了多行,如果语法正确,则查询将失败,上述版本允许多次插入
IF EXISTS是冗余的,这就是它被删除的原因,如果没有行,则不会插入到审核表中
如果要审核DELETE,则需要再次使用类似的语句,但使用的是已删除的表,而不是插入的表
若要审核更新,请创建一个新触发器。对于每个更新行,您都会在中插入一个条目(包含新更新)和在中删除一个条目(包含旧数据),如果您希望跟踪新旧数据,可以将它们合并 我不完全确定您在这里想要完成什么,所以我刚刚更正了语法以使其正常工作,但它应该会有所帮助。我也尝试过处理被删除的案例
CREATE TRIGGER DataTrigger
ON Data
AFTER INSERT , DELETE
AS
BEGIN
INSERT INTO [dbo].[AuditTrail]([ActionType],
[TableName],
[Name],
[Time])
SELECT 'INSERT','Data', col1, CURRENT_TIMESTAMP
FROM Inserted
INSERT INTO [dbo].[AuditTrail]([ActionType],
[TableName],
[Name],
[Time])
SELECT 'DELETE','Data', col1, CURRENT_TIMESTAMP
FROM Deleted
END
我不完全确定您在这里想要完成什么,所以我刚刚更正了语法以使其正常工作,但它应该会有所帮助。我也尝试过处理被删除的案例
CREATE TRIGGER DataTrigger
ON Data
AFTER INSERT , DELETE
AS
BEGIN
INSERT INTO [dbo].[AuditTrail]([ActionType],
[TableName],
[Name],
[Time])
SELECT 'INSERT','Data', col1, CURRENT_TIMESTAMP
FROM Inserted
INSERT INTO [dbo].[AuditTrail]([ActionType],
[TableName],
[Name],
[Time])
SELECT 'DELETE','Data', col1, CURRENT_TIMESTAMP
FROM Deleted
END
我们不需要IF EXISTSELECT*FROM Inserted语句,是吗?我们不需要IF EXISTSELECT*FROM Inserted语句,是吗?