Sql server 2008 r2 捕获sql审核中数据库级审核操作(删除、插入、更新)的行数
在SQL Server 2008R2中创建SQL审核时,如何配置数据库级审核操作组,例如删除、插入、,更新以捕获受影响的行数。您不能使用SQL Server 2008 r2 sys.fn_get_audit_文件在审核日志中跟踪此项,该文件返回审核中跟踪的所有值,受影响的行数不包括在该项列表中 在SQL Server 2012中,您可以使用sp_audit_write和触发器执行此操作Sql server 2008 r2 捕获sql审核中数据库级审核操作(删除、插入、更新)的行数,sql-server-2008-r2,Sql Server 2008 R2,在SQL Server 2008R2中创建SQL审核时,如何配置数据库级审核操作组,例如删除、插入、,更新以捕获受影响的行数。您不能使用SQL Server 2008 r2 sys.fn_get_audit_文件在审核日志中跟踪此项,该文件返回审核中跟踪的所有值,受影响的行数不包括在该项列表中 在SQL Server 2012中,您可以使用sp_audit_write和触发器执行此操作 CREATE TRIGGER [dbo].[ChangeMonitor] ON [dbo].[TableToT
CREATE TRIGGER [dbo].[ChangeMonitor] ON [dbo].[TableToTrack]
AFTER INSERT, UPDATE, DELETE
AS
DECLARE
@InsertCount INT
,@DeleteCount INT
,@msg NVARCHAR(4000)
select @DeleteCount = COUNT(*)
from deleted d
select @InsertCount = COUNT(*)
from inserted i
IF @InsertCount = @DeleteCount
BEGIN
SET @msg = @InsertCount +' Records Updated'
EXEC sp_audit_write @user_defined_event_id = 27 ,
@succeeded = 1
, @user_defined_information = @msg;
END
IF @InsertCount > @DeleteCount
BEGIN
SET @msg = @InsertCount +' Records Inserted'
EXEC sp_audit_write @user_defined_event_id = 27 ,
@succeeded = 1
, @user_defined_information = @msg;
END
IF @DeleteCount > @InsertCount
BEGIN
SET @msg = @DeleteCount +' Records Deleted'
EXEC sp_audit_write @user_defined_event_id = 27 ,
@succeeded = 1
, @user_defined_information = @msg;
END
GO
经过一些修改,SQL Server 2008 r2中仍然可以使用触发器来跟踪受影响的行数。您将无法使用审核日志。您可以创建自己的日志表,并将想要的信息写入该日志表
通过触发器可以访问插入和删除的两个临时表。这两个表的表结构与源表相同。“插入”包含所有已插入的新记录,“删除”包含所有已删除的记录。这些表在事件发生后会被清除,因此您不能在引发触发器的事件之外与之交互
使用触发器中的EVENTDATA,可以获得有关触发事件的信息
CREATE TRIGGER [dbo].[ChangeMonitor] ON [dbo].[TableToTrack]
AFTER INSERT, UPDATE, DELETE
AS
DECLARE
@InsertCount INT
,@DeleteCount INT
,@msg NVARCHAR(4000)
,@data XML
,@PostTime DATETIME
,@User NVARCHAR(100)
,@EventType NVARCHAR(100)
,@TSQL NVARCHAR(4000)
SET @data = EVENTDATA();
SET @PostTime = GETDATE()
SET @User = CONVERT(nvarchar(100), CURRENT_USER)
SET @EventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)')
SET @TSQL = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)')
select @DeleteCount = COUNT(*)
from deleted d
select @InsertCount = COUNT(*)
from inserted i
IF @InsertCount = @DeleteCount
BEGIN
-- SQL for logging updates
END
IF @InsertCount > @DeleteCount
BEGIN
-- SQL for logging inserts
END
IF @DeleteCount > @InsertCount
BEGIN
-- SQL for loggin deletes
END
GO