【问题标题】:Get database name from DDL Trigger从 DDL 触发器获取数据库名称
【发布时间】:2009-03-26 18:25:02
【问题描述】:

我正在 SQL 2008 中创建服务器级触发器来记录表的创建和删除。我需要记录在其中创建/删除表的数据库。首先,我创建了一个默认值为 db_name() 的列,但这始终记录为 master。接下来我尝试在我的插入语句中使用它:

EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)')

这工作了一段时间,但突然它开始记录所有表创建和删除的主控表,而不管表所在的数据库。所有表删除都是使用 SSMS 完成的。有谁知道我为什么会看到这种行为?更重要的是,有人知道如何记录正确的数据库吗?

编辑:我发现一篇文章让我觉得我在做的是不正确的。显然,您应该只从数据库范围的触发器中捕获 create_table 和 drop_table ,而不是从 server_scoped 触发器中捕获。尽管有人知道如何解决这个问题,但我仍然想保留这个问题。

【问题讨论】:

    标签: sql-server triggers


    【解决方案1】:

    嗨,

    你是对的,CREATE TABLE 和 DROP TABLE 事件应该从在数据库级别定义的 DDL 触发器中记录。

    服务器级触发器用于服务器范围的事件,例如发生登录时。

    这是一篇可以帮助你发展的优秀文章。

    http://www.developer.com/db/article.php/3552096

    以下参考详细说明了可以在数据库或服务器范围内触发哪些 DDL 事件。

    http://msdn.microsoft.com/en-us/library/ms189871(SQL.90).aspx 干杯,

    【讨论】:

    • 感谢 MSDN 链接。我在 MSDN 中搜索了该列表,但找不到它。
    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多