Sql server SQL Server-从触发器名称未知的表中删除所有触发器
我正在使用SignalR,它会自动在数据库表上创建具有随机名称的触发器Sql server SQL Server-从触发器名称未知的表中删除所有触发器,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,我正在使用SignalR,它会自动在数据库表上创建具有随机名称的触发器 有没有一种方法可以使用T-SQL脚本在不删除表的情况下删除特定表中的所有触发器 您可以使用动态SQL和系统表: DECLARE @sql NVARCHAR(MAX); SELECT @sql = STRING_AGG(FORMATMESSAGE(N'DROP TRIGGER %s.%s;' ,QUOTENAME(OBJECT_SCHEMA_NAME
有没有一种方法可以使用T-SQL脚本在不删除表的情况下删除特定表中的所有触发器 您可以使用动态SQL和系统表:
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和系统表:
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 Server实例(Microsoft SQL Server 2014-12.0.2269.0(X64))似乎不支持字符串聚合,但这似乎是正确的答案。抱歉没有提及SQL Server版本。您知道在SQL Server 2014中适用的方法吗?@phicon然后您需要将代码更改为使用
@SQL+=DROP…
这看起来是正确的答案,尽管我的SQL Server实例(Microsoft SQL Server 2014-12.0.2269.0(X64))似乎不支持STRING\u AGG。抱歉没有提及SQL Server版本。您知道在SQL Server 2014中适用的方法吗?@phicon然后您需要将代码更改为使用@SQL+=DROP…