Sql server T-SQL审计表在没有触发器的情况下更改,是否可能?

Sql server T-SQL审计表在没有触发器的情况下更改,是否可能?,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,现在,我们正在使用两个DateTime字段审核一个表: [Creation] [datetime] NOT NULL DEFAULT (getutcdate()), [Modification] [datetime] NOT NULL DEFAULT (getutcdate()) 然后,更新时会有一个触发器,该触发器更改[Modification]的值,如下所示: CREATE TRIGGER [dbo].[Record_Updated] ON [dbo].[MyTable] FOR UPDA

现在,我们正在使用两个DateTime字段审核一个表:

[Creation] [datetime] NOT NULL DEFAULT (getutcdate()),
[Modification] [datetime] NOT NULL DEFAULT (getutcdate())
然后,更新时会有一个触发器,该触发器更改[Modification]的值,如下所示:

CREATE TRIGGER [dbo].[Record_Updated]
ON [dbo].[MyTable]
FOR UPDATE /* Fire this trigger when a row UPDATE */
AS BEGIN
    UPDATE [dbo].[MyTable] 
    SET [dbo].[Table].[Modification] = GETUTCDATE()
    FROM [dbo].[MyTable]
    JOIN INSERTED ON INSERTED.MyID = [dbo].[MyTable].[MyID]
END
问题是,因为我们处理的是客户数据库,而他们不需要触发器,所以T-SQL中是否有其他方法可以实现相同的结果?
DB>=SQL 2012或SQL Azure

我认为您所做的不是审计。您所要做的就是设置两个日期列,以指示行最后一次修改的时间。此外,你在触发器中的评论说,它将触发更新和插入,但它只会触发更新。无论如何,您可以将此逻辑添加到执行插入和更新的过程中。否则,除了触发器之外,您真的没有什么可以做的。我已经在代码中更新了注释。不幸的是,根本没有SP,这些表由第三方应用程序处理,这就是我引入触发器的原因,因为DAL(数据应用层)在中创建新行并修改现有行时,无法更新这些字段。因此,对于SQL Server,唯一的“事件”是通过使用触发器进行的?是的。事件是插入、更新或删除,您使用触发器处理该事件。您考虑过CDC(更改数据捕获)吗?它对您可以使用的SQL Server版本有一些限制,但在审计方面远远优于触发器。不,我不知道CDC@RogerWolf,我会看看这个替代方案