SQL Server 2005: T-SQL для временного отключения триггера

Возможно, это связано с современным подходом к программированию. Вы знаете, много лет назад вы могли бы написать свою программу на листе бумаги, некоторые другие люди превратили бы ее в стопку перфокарт и загрузили в компьютер, а завтра утром вы получите аварийную свалку на рулоне бумаги, взвешивающем пол пуда. Все это заставило вас много думать, прежде чем писать первую строку кода.

Те дни давно прошли. При использовании языка сценариев, такого как PHP или JavaScript, вы можете немедленно протестировать любые изменения. Это не относится к Java, хотя приложения-службы предоставляют вам горячее развертывание. Поэтому очень удобно, что Java-программы могут быть скомпилированы быстро, поскольку компиляторы байт-кода довольно просты.

Но не существует таких языков, как JIT-only. В настоящее время компиляторы доступны для Java в течение некоторого времени, а в последнее время Моно представил его в CLR. Фактически, MonoTouch вообще возможен из-за компиляции AOT, поскольку в магазине приложений Apple запрещены неродные приложения.

50
задан Austin Salonen 23 September 2008 в 20:13
поделиться

3 ответа

DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

http://msdn.microsoft.com/en-us/library/ms189748 (SQL.90) .aspx

, сопровождаемый инверсией:

ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

http://msdn.microsoft.com/en-us/library/ms182706 (SQL.90) .aspx

62
ответ дан sth 7 November 2019 в 20:38
поделиться

Однако это - почти всегда плохая идея сделать это. Вы смешаете с целостностью базы данных. Не делайте этого, не рассматривая разветвления и сверяясь с dbas, если у Вас есть они.

, Если Вы действительно следуете за кодом Matt убедиться не забыть снова включать триггер. И помните, что триггер отключен для всех вставка, обновление или удаление из таблицы, в то время как это выключено, не только для Вашего процесса, поэтому если это должно быть сделано, затем сделать это в течение часов, когда база данных наименее активна (и предпочтительно в однопользовательском режиме).

, Если необходимо сделать это для импорта большого объема данных, затем полагайте, что объемная вставка не запускает триггеры. Но тогда Ваш процесс после объемной вставки должен будет согласовать любые проблемы целостности данных, которые Вы представляете, ни увольнение триггеров.

15
ответ дан HLGEM 7 November 2019 в 20:38
поделиться

Иногда, чтобы заполнить пустую базу данных от внешнего источника данных или отладить проблему в базе данных я должен отключить ВСЕ триггеры и ограничения. Чтобы сделать так, я использую следующий код:

Для отключения всех ограничений и триггеров:

sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
sp_msforeachtable "ALTER TABLE ? DISABLE TRIGGER  all"

Для включения всех ограничений и триггеров:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? ENABLE TRIGGER  all"

я нашел, что решение некоторое время назад на SQLServerCentral, но должен был изменить разрешать ограничительную часть, поскольку исходный не работал полностью

33
ответ дан kristof 7 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

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