如何获取数据库中活动触发器的列表?
我的应用程序基于一个sql服务器数据库。如何获取数据库中活动触发器的列表?
除自定义以外,所有客户都拥有相同的分贝。
一些自定义包括:新表,修改表,自定义视图,自定义触发...
当我运行软件更新一些脚本执行。现在我手动禁用触发器并在脚本完成后重新启用。
无论如何,我想自动禁用所有的触发器(启用,可能是其中一些可能已被禁用),然后在最后重新启用它们。
不是重新发明whell,怎么做?
如何只获取当前数据库的活动触发器?
一旦我得到这个我可以编程方式创建和运行
DISABLE TRIGGER triggername ON TABLENAME
ENABLE TRIGGER triggername ON TABLENAME
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
1表示真,0表示假明显
使用杰夫·O公司查询和修改它有点
或将其添加为where子句。
where TRIG.is_disabled = 0 -- or 1 depends on what you want
我选择这个答案作为答案,即使所有的都是正确的,这只是简单的“完美”。 – LaBracca 2012-03-12 16:06:19
注意:“数据库触发器”没有关联的表,因此其“parent_id”为0.因此上面的“内部连接”将不匹配。只为未来的读者,因为这是公认的答案。 – granadaCoder 2016-04-07 20:56:14
SELECT *
FROM sys.triggers
WHERE is_disabled = 0
SELECT
TAB.name as Table_Name
, TRIG.name as Trigger_Name
FROM [sys].[triggers] as TRIG
inner join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
SELECT
TAB.name as Table_Name,
TRIG.name as Trigger_Name,
Comments.Text TriggerText
FROM [sys].[triggers] as TRIG
Inner Join sys.tables as TAB on TRIG.parent_id = TAB.object_id
Inner Join syscomments Comments On TRIG.object_id = Comments.id
WHERE
TRIG.is_disabled = 0;
是完整的解决方案
select * from sys.triggers
这里object_id是对表,以便从加盟sys.table
你可以得到表名
下面是当你这样做时查询SSMS中“数据库触发器”的刷新。
SELECT
tr.name AS [Name],
'Server[@Name=' + quotename(CAST(
serverproperty(N'Servername')
AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/DdlTrigger[@Name=' + quotename(tr.name,'''') + ']' AS [Urn],
tr.is_disabled AS [IsEnabled]
FROM
sys.triggers AS tr
WHERE
(tr.parent_class = 0)
ORDER BY
[Name] ASC
利用这一点,我创建了一个版本(增强接受的答案),包括数据库的触发器。
注意左连接和COALESCE检查。
SELECT
COALESCE(TAB.name, 'DATABASE') as TargetObjectName
, TRIG.name as Trigger_Name
, TRIG.is_disabled --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
-- select *
FROM [sys].[triggers] as TRIG
left join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
WHERE
/* (TRIG.parent_class = 0) and */
TRIG.is_disabled = 0
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%related_table_name%'
这对我2005年的数据库非常有用。谢谢。 – 2017-10-25 17:27:15
//使用数据库 使用[数据库名称]
选择sys.triggers *其中is_disaabled = 0
[SQL服务器的你能否详细说明你的答案? – 2017-09-14 07:02:28
可能重复:检查是否触发是启用还是禁用?](http:// stackoverflow。com/questions/8136937/sql-server-check-a-trigger-is-enabled-or-disabled) – michaelAngelo 2014-12-10 09:26:16