Mam bazę danych ze 104 wyzwalaczami. Czy istnieje sposób, aby usunąć wszystkie wyzwalacze za pomocą jednego polecenia z pojedynczej bazy danych o nazwie „system_db_audits?
sql-server
sql-server-2008
trigger
Mohamed Mahyoub
źródło
źródło
DROP TRIGGER
oświadczenia nie wymagają terminatorów;
?W przypadku, gdy chcesz uruchomić zadanie SQL na serwerze centralnym [ServerA] w celu usunięcia wyzwalacza, dostarczę wersję programu PowerShell przy założeniu, że masz instancję SQL Server 2012 (lub nowszą) z modułem SQLPS zainstalowanym na [ServerA]
Powiedz, że chcesz usunąć wszystkie wyzwalacze z bazy danych [AdventureWorks] w instancji [ServerB] SQL Server (SQL Server 2005+).
Możesz uruchomić następujący PS na [ServerA]:
Pamiętaj, aby zastąpić ServerB i AdventureWorks własnymi wartościami.
Jest to dość elastyczne rozwiązanie, które można łatwo dostosować, aby dostosować się do innych różnych wymagań, takich jak tylko usuwanie wyzwalaczy należy do określonego zestawu tabel lub wyłączenie (zamiast usuwania) niektórych określonych wyzwalaczy itp.
Ściśle mówiąc, rozwiązania dostarczone przez @Mark Sinkinson nie są poprawne, ponieważ wymaganiem nie jest usuwanie wyzwalaczy z bazy danych „system_db_audits”, ale usuwanie wyzwalaczy z innej bazy danych z „system_db_audits”. Oznacza to, że musisz utworzyć dynamiczny sql w 'system_db_audits', aby owinąć „dynamiczny sql” dostarczony przez @Mark Sinkinson, aby usunąć te wyzwalacze docelowe, zakładając, że zarówno „system_db_audits”, jak i docelowa baza danych znajdują się w tej samej instancji serwera sql. W przeciwnym razie, jeśli dwa dbs nie są w tej samej instancji, obsługa usuwania będzie nawet „brzydka” (np. Przez połączony serwer itp.). W takim scenariuszu PS jest eleganckim rozwiązaniem bez względu na to, gdzie docelowa baza danych znajduje się w tej samej instancji SQL.
źródło