Moh*_*oub 18 trigger sql-server-2008 sql-server
我有一个包含 104 个触发器的数据库,有没有办法使用单个命令从名为“system_db_audits”的单个数据库中删除所有触发器?
Mar*_*son 35
您可以使用动态 SQL 和sys.triggersDMV 来构建您可以执行的查询。
is_ms_shipped排除 SQL Server 附带的任何触发器。
parent_class_desc对象级别触发器的过滤器,而不是数据库级别。
更改PRINT到EXEC一旦您满意的输出。
USE system_db_audits;
GO
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql +=
N'DROP TRIGGER ' +
QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) + N'.' +
QUOTENAME(t.name) + N'; ' + NCHAR(13)
FROM sys.triggers AS t
WHERE t.is_ms_shipped = 0
AND t.parent_class_desc = N'OBJECT_OR_COLUMN';
PRINT @sql;
Run Code Online (Sandbox Code Playgroud)
使用Sys.Triggers元数据表,其中包含作为触发器的每个对象的行
执行这个脚本:
USE YourDBName
GO
SELECT ' GO ' + Char(10) + Char(13) + 'DROP TRIGGER '
+ QUOTENAME(OBJECT_SCHEMA_NAME(O.[object_id])) + '.'
+ QUOTENAME(name)
FROM sys.sql_modules as M
INNER JOIN sys.triggers as O
ON M.object_id = O.object_id;
Run Code Online (Sandbox Code Playgroud)将输出复制到新的 SQL Server Management Studio 窗口中,验证代码执行您期望的操作,然后执行。
| 归档时间: |
|
| 查看次数: |
25562 次 |
| 最近记录: |