Tenho um banco de dados com 104 triggers, existe alguma forma de deletar todos os triggers com um único comando de um único banco de dados chamado 'system_db_audits?
relate perguntas
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Quanto "Padding" coloco em meus índices?
-
Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?
-
Como determinar se um Índice é necessário ou necessário
-
Downgrade do SQL Server 2008 para 2005
Você pode usar o SQL dinâmico e o
sys.triggers
DMV para criar uma consulta que pode ser executada.is_ms_shipped
exclui quaisquer gatilhos que foram enviados com o SQL Server.parent_class_desc
filtros para gatilhos de nível de objeto, em vez de nível de banco de dados.Altere o
PRINT
para anEXEC
quando estiver satisfeito com a saída.Use
Sys.Triggers
Meta Data Table que contém uma linha para cada objeto que é um gatilhoExecute este script:
Copie a saída para uma nova janela do SQL Server Management Studio, verifique se o código executa as ações que você espera e execute.
Caso você queira executar um trabalho sql em um servidor central [ServerA] para fazer o trabalho de exclusão do gatilho, fornecerei uma versão do PowerShell supondo que você tenha uma instância do SQL Server 2012 (ou superior) com o módulo SQLPS instalado no [ServerA]
Digamos que você queira excluir todos os gatilhos no banco de dados [AdventureWorks] na instância [ServerB] do SQL Server (SQL Server 2005+).
Você pode executar o seguinte PS em [ServerA]:
Lembre-se de substituir ServerB e AdventureWorks por seus próprios valores.
Esta é uma solução bastante flexível que você pode personalizar facilmente para se adaptar a outros requisitos diferentes, como apenas excluir gatilhos pertencentes a um conjunto específico de tabelas ou desabilitar (em vez de excluir) alguns gatilhos específicos etc.
Estritamente falando, as soluções fornecidas por @Mark Sinkinson não estão corretas porque o requisito não é excluir gatilhos no banco de dados 'system_db_audits', mas excluir gatilhos em outro banco de dados de 'system_db_audits'. Isso significa que você precisa criar um sql dinâmico em 'system_db_audits' para envolver o "sql dinâmico" fornecido por @Mark Sinkinson para excluir esses gatilhos de destino, assumindo que 'system_db_audits' e o banco de dados de destino estão na mesma instância do sql server. Caso contrário, se os dois dbs não estiverem na mesma instância, será ainda muito "feio" lidar com a exclusão (como via servidor vinculado etc.). Nesse cenário, o PS é uma solução elegante, não importa onde o banco de dados de destino esteja ou não na mesma instância sql.
Para levar em conta o limite da string que contém a string sql:
Para Views o comando SET seria:
Para Stored Procedures o comando SET seria: