该 的 系统对象。{instrig / deltrig / updtrig} 强> 如果一个表只能在每种类型的触发器中最多只有1个,那么这些列就是回归的好时机。 [是的,这些列仍在使用,但仅用于表所有者创建的第一个触发器;或视图的所有者 instead of 触发]
instead of
请记住,为 的 sysobjects.type = 'TR' 强> 条目, 的 deltrig 强> column包含触发器所属的基表的id ...来自 sysobjects.deltrig列描述 :
deltrig: Stored procedure ID of a delete trigger if the entry is a table. Table ID if the entry is a trigger
不幸的是,它变得有点复杂,因为额外的触发器(例如,在这种情况下由非表所有者创建)也会添加一个关联的行 的 sysconstraints中 强> ( 的 sysconstraints.constrid 强> = 的 的object_id(大于TRIGGER_NAME≤) 强> ),随着 的 sysconstraints.status 强> 列(位图)指定触发器是用于插入,更新和/或删除。
使用您的示例代码(并替换 s1 同 markp ),这应该让你知道你的反对意见:
s1
markp
select id, left(name,30) as objname, type, left(user_name(uid),10) as 'owner', deltrig, instrig, updtrig from sysobjects where name like 'tblAll%' order by type,uid go id objname type owner deltrig instrig updtrig ----------- ------------------------------ ---- ---------- ----------- ----------- ----------- 752002679 tblAllTypesTriggers_6 TR dbo 736002622 0 0 816002907 tblAllTypesTriggers_6 TR markp 736002622 0 0 736002622 tblAllTypesTriggers U dbo 0 752002679 0 -- here we see the 2x triggers (type = TR) have deltrig = 736002622 = id of the table (type = U) select * from sysconstraints where tableid = object_id('tblAllTypesTriggers') go colid constrid tableid error status spare2 ------ ----------- ----------- ----------- ----------- ----------- 0 816002907 736002622 0 1024 0 -- here we see markp's trigger (constrid = 816002907) is associated with -- the dbo's table (tableid = 736002622), with status & 1024 = 1024 -- indicating that this is a 'insert' trigger
注意:您可以从源代码中获取上述所有内容 的 sp_helptrigger 强> 。 (“Duh,Mark!”?)[是的,默认 的 sp_helptrigger 强> 可以从一些编辑中受益,例如,显示每个触发器的所有者/架构。
一个快速的,非常热门的查询来回答您的问题:
select left(o1.name,30) as tabname, left(user_name(o1.uid),10) as tabowner, left(o2.name,30) as trigname, left(user_name(o2.uid),10) as trigowner from sysobjects o1, sysobjects o2 where o1.name = 'tblAllTypesTriggers' and o1.type = 'U' and o2.deltrig = o1.id and o2.type = 'TR' order by 1,2,4,3 go tabname tabowner trigname trigowner ------------------------------ ---------- ------------------------------ ---------- tblAllTypesTriggers dbo tblAllTypesTriggers_6 dbo tblAllTypesTriggers dbo tblAllTypesTriggers_6 markp
之间 的 系统对象 强> , 的 sysconstraints中 强> 和来源 的 sp_helptrigger 强> 你应该能够按照你希望的方式对数据进行切片。