SQL триггер CLR: название контекста DB

Я хотел бы повернуть триггерную рекурсию вкл\выкл в моем триггере CLR SQL. Согласно http://www.devx.com/tips/Tip/30031, я должен звонить

EXEC sp_dboption '', 'recursive triggers', 'true'/'false'

Существует ли способ узнать, каково текущее имя DB? При создании триггера я прошу, чтобы пользователи выбрали один, но я не хочу писать это в таблице.

С уважением,

1
задан gbn 28 July 2010 в 17:03
поделиться

2 ответа

Я нашел лучшее решение.

Я должен вообще избегать вызова процедуры EXEC sp_dboption. Вместо этого я должен создать временную таблицу как флаг «без рекурсии», затем проверить наличие таблицы в начале триггера и выйти, если таблица существует.

Почему временная таблица?

  1. Его убивают в конце сеанса. Нет необходимости сбрасывать флаг (в исключительной ситуации), что необходимо во избежание постоянного отключения триггера.
  2. Насколько я знаю, он создается и уничтожается независимо для каждого соединения. Таким образом, если пользователь изменяет данные одновременно, конфликта не будет (что неизбежно для процедуры EXEC sp_dboption).
0
ответ дан 2 September 2019 в 22:39
поделиться

Вы знаете, что такое база данных при создании триггера...

CREATE TRIGGER etc
....
GO
DECLARE @db varchar(100)
SET @db = DB_NAME()
EXEC sp_dboption @db, 'recursive triggers', 'true'/'false'
1
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: