【问题标题】:SQL way to save history of commands done?保存命令历史记录的SQL方法完成了吗?
【发布时间】:2014-06-11 21:49:39
【问题描述】:

您好,我有一个数据库,我们经常需要删除记录,但是有时可能会错误地执行此操作?谢谢

【问题讨论】:

  • 答案很大程度上取决于您使用的 RDBMS,因此您应该将该信息添加到您的问题中。
  • 抱歉是 SQL Server
  • 没问题。我已经相应地重新标记了这个问题。
  • stackoverflow.com/questions/8672350/… 这样的东西如何,并将已删除的记录保存到单独的表中?

标签: sql sql-server database


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    我看到您正在使用 Sql Server。 您可以按照某人的建议编写触发器,也可以配置更改数据捕获。 CDC会有更好的表现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2011-06-16
      • 2013-08-17
      • 2021-02-10
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多