【发布时间】: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