Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 在每次插入、删除时记录更改的触发器_Tsql_Sql Server 2008 - Fatal编程技术网

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语句,是吗?