用SQL方法保存命令的历史记录?

时间:2014-06-11 09:20:20

标签: sql sql-server database

您好我有一个数据库,我们经常需要删除记录,但是因为这有时可能会被错误地完成我想知道有没有办法保存完成的SQL命令的历史记录,并输出到它们的屏幕日志?感谢

2 个答案:

答案 0 :(得分:0)

试试这个:

USE YourDatabase;
GO
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log 
   (PostTime, DB_User, Event, TSQL) 
   VALUES 
   (GETDATE(), 
   CONVERT(nvarchar(100), CURRENT_USER), 
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), 
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
--Test the trigger
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO

Reference

答案 1 :(得分:0)

我看到你正在使用Sql Server。 您可以按照某人的建议编写触发器,也可以配置Change Data Capture。 CDC将有更好的表现。