English 中文(简体)
从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,而不是从服务器范围的触发器中捕获。不过,我仍然想保持问题的开放性,以防有人知道如何解决这个问题。

最佳回答

你好 (nǐ hǎo)

您是正确的,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 Cheers,

问题回答

暂无回答




相关问题
热门标签