Получить имя базы данных из DDL Trigger - PullRequest
1 голос
/ 26 марта 2009

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

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

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

РЕДАКТИРОВАТЬ: Я нашел статью, которая заставляет меня думать, что я делаю, неправильно. Очевидно, вы должны захватывать только create_table и drop_table из триггера области базы данных, а не из триггера server_scoped. Я все еще хотел бы оставить вопрос открытым, хотя в случае, если кто-то знает, как обойти это.

1 Ответ

2 голосов
/ 26 марта 2009

HI

Вы правы, события 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,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...