【发布时间】:2019-09-10 14:53:14
【问题描述】:
我正在使用 SignalR,它会在数据库表上自动创建具有随机名称的触发器。
有没有一种方法可以使用 T-SQL 脚本从特定表中删除所有触发器而不删除该表?
【问题讨论】:
标签: sql-server tsql triggers
我正在使用 SignalR,它会在数据库表上自动创建具有随机名称的触发器。
有没有一种方法可以使用 T-SQL 脚本从特定表中删除所有触发器而不删除该表?
【问题讨论】:
标签: sql-server tsql triggers
您可以使用动态 SQL 和sys.triggers 系统表:
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = STRING_AGG(FORMATMESSAGE(N'DROP TRIGGER %s.%s;'
,QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id))
,QUOTENAME(t.name))
,NCHAR(13))
FROM sys.triggers AS t
WHERE t.is_ms_shipped = 0
AND t.parent_id = OBJECT_ID('table_name');
PRINT @sql; -- debug
--EXEC(@sql);
SQL Server 2012 版本:
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql += FORMATMESSAGE(N'DROP TRIGGER %s.%s;'
,QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id))
,QUOTENAME(t.name))
+ NCHAR(13)
FROM sys.triggers AS t
WHERE t.is_ms_shipped = 0
AND t.parent_id = OBJECT_ID('t');
PRINT @sql; -- debug
--EXEC(@sql);
【讨论】:
@sql += DROP ...