我在SQL Server 2008中有数据库,几乎每个表都有触发器。我需要检查没有主动触发器的表格 如何获取没有任何活动触发器的所有表的列表(没有任何触发器的表或那些禁用所有触发器的表)?
答案 0 :(得分:5)
您可以在sys.tables
和sys.triggers
之间进行反半连接。
e.g。与NOT IN
SELECT *
FROM sys.tables
WHERE object_id NOT IN (SELECT parent_id
FROM sys.triggers
WHERE is_disabled = 0)
或NOT EXISTS
SELECT *
FROM sys.tables t
WHERE NOT EXISTS (SELECT *
FROM sys.triggers tr
WHERE is_disabled = 0
AND tr.parent_id = t.object_id)
sys.tables.object_id
或sys.triggers.parent_id
都不可为空,在这种情况下,两者均为the same semantics and plan。