【发布时间】:2010-09-24 00:41:41
【问题描述】:
我正在使用 SQL Advantage 并且需要知道 SQL 是什么来识别与表关联的触发器。我没有使用其他工具的选项,所以老式的 SQL 解决方案是理想的答案。
【问题讨论】:
我正在使用 SQL Advantage 并且需要知道 SQL 是什么来识别与表关联的触发器。我没有使用其他工具的选项,所以老式的 SQL 解决方案是理想的答案。
【问题讨论】:
我也发现了
sp_depends <object_name>
将向您显示有关表的大量信息,包括与其关联的所有触发器。使用它以及 Ray 的查询可以更容易地找到触发器。结合 Ray 的链接文章中的这个查询:
sp_helptext <trigger_name>
你可以看到触发器的定义:
sp_depends <trigger_name>
还将显示与触发器相关的所有表
【讨论】:
选择 * 来自系统对象 其中 type = 'TR'
取自here。
【讨论】:
显示触发器并为表创建 sql:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
【讨论】:
SELECT
T.name AS TableName
,O.name TriggerName
FROM sysobjects O
INNER JOIN sys.tables T ON T.object_id = O.parent_obj
WHERE O.type = 'TR' AND T.name IN ('tableNames')
ORDER BY TableName
【讨论】:
我相信存在(或至少“曾经”)依赖信息并不总是准确的问题。因此,我会尝试这样处理它:
select name
from sysobjects
where xtype='TR'
and id in (select id from syscomments where text like '%MY-TABLE-NAME%')
祝你好运。
PS-这是未经测试的代码,如果不起作用,请发表评论,我会修复它。
【讨论】:
“对象名称”列显然显示了与触发器关联的表。向下滚动到您感兴趣的表格。
【讨论】:
我将使用以下代码来确保您获得正确的对象。从 Sybase 16 开始,这将不再完整,因为一张表上可能有更多相同类型的触发器。
select tr.id, tr.name, tr.type, tr.crdate, tr.loginame
from sysobjects u
join sysobjects tr on tr.id in (u.instrig, u.deltrig, u.updtrig, u.seltrig)
where u.name = 'TABLENAME'
【讨论】:
我使用的是 SQL Anywhere 16,很容易找到特定表的触发器。打开表格时,有一个名为“触发器”的选项卡。但是查找所有触发器的查询与上面的答案有点不同:
select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
【讨论】: