我正在SQL 2008中创建服务器级触发器以记录表的创建和删除。我需要记录表创建/删除的数据库。首先,我创建了一个列,其默认值为db_name(),但这总是记录为master。接下来,我尝试在我的插入语句中使用此代码:
EVENTDATA().value( (/EVENT_INSTANCE/DatabaseName)[1] , nvarchar(max) )
这个方法有一段时间是有效的,但突然间开始记录所有表的主数据,无论表位于哪个数据库中。所有表的删除都是使用 SSMS 进行的。有人知道我为什么会看到这种行为吗?更重要的是,有人知道如何记录正确的数据库吗?
编辑:我找到了一篇文章,让我觉得我正在做的是不正确的。显然,您应该仅从数据库范围的触发器中捕获 create_table 和 drop_table,而不是从服务器范围的触发器中捕获。不过,我仍然想保持问题的开放性,以防有人知道如何解决这个问题。