Я создаю триггер уровня сервера в SQL 2008, чтобы регистрировать создание и удаление таблиц. Мне нужно войти в базу данных, в которой была создана / удалена таблица. Сначала я создал столбец со значением по умолчанию db_name (), но это всегда записываемый мастер. Затем я попытался использовать это в своем операторе вставки:
EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)')
Это работало некоторое время, но внезапно оно начало записывать мастер записи для всех созданий таблицы и отбрасываний независимо от базы данных, в которой была таблица. Все удаления таблиц были выполнены с использованием SSMS. Кто-нибудь знает, почему я вижу это поведение? Что еще более важно, кто-нибудь знает, как зарегистрировать правильную базу данных?
РЕДАКТИРОВАТЬ: Я нашел статью, которая заставляет меня думать, что я делаю, неправильно. Очевидно, вы должны захватывать только create_table и drop_table из триггера области базы данных, а не из триггера server_scoped. Я все еще хотел бы оставить вопрос открытым, хотя в случае, если кто-то знает, как обойти это.