Sql server SQL Server-从触发器名称未知的表中删除所有触发器

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

我正在使用SignalR,它会自动在数据库表上创建具有随机名称的触发器


有没有一种方法可以使用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…