У меня есть база данных с 104 триггерами, есть ли способ удалить все триггеры с помощью одной команды из одной базы данных с именем system_db_audits?
sql-server
sql-server-2008
trigger
Мохамед Махюб
источник
источник
DROP TRIGGER
заявлениям не нужны терминаторы;
?Если вы хотите запустить задание sql на центральном сервере [ServerA], чтобы выполнить работу по удалению триггера, я предоставлю версию PowerShell, предполагающую, что у вас есть экземпляр SQL Server 2012 (или выше) с модулем SQLPS, установленным на [ServerA]
Допустим, вы хотите удалить все триггеры в базе данных [AdventureWorks] на [ServerB] экземпляре SQL Server (SQL Server 2005+).
Вы можете запустить следующий PS на [ServerA]:
Пожалуйста, не забудьте заменить ServerB и AdventureWorks своими собственными значениями.
Это довольно гибкое решение, которое вы можете легко настроить для адаптации к другим различным требованиям, например, только триггеры удаления принадлежат к определенному набору таблиц или отключить (вместо удаления) некоторые конкретные триггеры и т. Д.
Строго говоря, решения, предоставленные @Mark Sinkinson, неверны, поскольку требуется не удалять триггеры в базе данных «system_db_audits», а удалять триггеры в другой базе данных из «system_db_audits». Это означает, что вам нужно создать динамический sql в 'system_db_audits', чтобы обернуть "динамический sql", предоставленный @Mark Sinkinson, для удаления этих целевых триггеров, предполагая, что и system_db_audits, и целевой db находятся на одном экземпляре сервера sql. В противном случае, если две базы данных находятся не в одном и том же экземпляре, обработка удаления будет даже «уродливой» (например, через связанный сервер и т. Д.). В таком сценарии PS является элегантным решением, независимо от того, где находится или нет целевой базы данных в одном экземпляре SQL.
источник