从DDL Trigger获取数据库名称

时间:2009-03-26 18:25:03

标签: sql-server triggers

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

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

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

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

1 个答案:

答案 0 :(得分:2)

HI,

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

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

这是一篇很好的文章,可以帮助您的发展。

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

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

http://msdn.microsoft.com/en-us/library/ms189871(SQL.90).aspx 欢呼声,