2009-03-26 5 views
1

Я создаю триггер уровня сервера в SQL 2008 для создания журнальных журналов и их удаления. Мне нужно зарегистрировать базу данных, из которой была создана таблица. Сначала я создал столбец со значением по умолчанию db_name(), но это всегда записываемый мастер. Затем я попытался использовать это в моем вставном заявлении:Получить имя базы данных из DDL Trigger

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

Это работало на некоторое время, но вдруг он начал запись мастера для всех творений таблицы и капля независимо от базы данных таблицы была в каждом из таблицы капли. была выполнена с использованием SSMS. Кто-нибудь знает, почему я вижу это поведение? Еще важнее, знает ли кто-нибудь, как регистрировать правильную базу данных?

EDIT: Я нашел статью, которая заставляет меня думать, что я делаю неправильно. По-видимому, вы должны захватывать только create_table и drop_table из триггера с привязкой к базе данных, а не из триггера server_scoped. Я все равно хотел бы оставить вопрос открытым, если кто-то знает, как обойти это.

ответ

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 Cheers,

+0

Спасибо за ссылку MSDN. Я искал MSDN для списка и не смог его найти. – jhale

+0

Добро пожаловать, рад помочь. –

Смежные вопросы