Как не отключать триггеры во время развертывания в SQL Server

При развертывании проектов базы данных SQL Server (с помощью мастера публикации SSDT или развертывания DACPAC) автоматические сценарии SQL запускаются с отключения всех триггеров.

Как этого избежать?

И каковы побочные эффекты неотключения триггеров?

PRINT N'Disabling all DDL triggers...'
GO
DISABLE TRIGGER ALL ON DATABASE
GO
<ALL DB CHANGES>
GO
PRINT N'Reenabling DDL triggers...'
GO
ENABLE TRIGGER [LogSchemaChanges] ON DATABASE
GO
PRINT N'Update complete.';

Зачем мне это делать? У нас есть триггер, который регистрирует все изменения схемы в журнале аудита. ...и разве это не иронично, не так ли...


person Martin Thøgersen    schedule 07.01.2019    source источник
comment
это определенно опция, которую вы можете включить или выключить   -  person Martin Smith    schedule 07.01.2019
comment
Побочным эффектом будет то, что эти триггеры сработают... и вы увидите снижение производительности.   -  person scsimon    schedule 07.01.2019


Ответы (1)


Для ручного развертывания мастера публикации измените поведение в разделе:

  1. Дополнительные параметры публикации › Общие › Дополнительные параметры развертывания.
  2. Снимите флажок «Отключить» и снова включите триггеры DDL.

Для автоматического развертывания DACPAC через SQLPackage установите следующий опубликовать свойство:

/p:DisableAndReenableDdlTriggers=False

Указывает, отключаются ли триггеры языка определения данных (DDL) в начале процесса публикации и снова включаются в конце действия публикации.

person Martin Thøgersen    schedule 07.01.2019
comment
** Обратите внимание, что использование флага DisableAndReenableDdlTriggers делает триггеры снова ВКЛЮЧЕННЫМИ непосредственно ПЕРЕД запуском сценария после развертывания ** Это означает, что сценарии после развертывания будут выполняться со всеми включенными триггерами снова. - person gsubiran; 30.06.2020
comment
Мне потребовалась пара попыток, чтобы понять это, но командной строке не нравились пробелы вокруг = . Мне пришлось использовать: /p:DisableAndReenableDdlTriggers=False - person JoeLeBaron; 20.11.2020