如何识别与 sybase 数据库中的表关联的触发器?
Posted
技术标签:
【中文标题】如何识别与 sybase 数据库中的表关联的触发器?【英文标题】:How do you identify the triggers associated with a table in a sybase database? 【发布时间】:2010-09-24 00:41:41 【问题描述】:我正在使用 SQL Advantage 并且需要知道 SQL 是什么来识别与表关联的触发器。我没有使用其他工具的选项,所以老式的 SQL 解决方案是理想的答案。
【问题讨论】:
【参考方案1】:我也发现了
sp_depends <object_name>
将向您显示有关表的大量信息,包括与其关联的所有触发器。使用它以及 Ray 的查询可以更容易地找到触发器。结合 Ray 的链接文章中的这个查询:
sp_helptext <trigger_name>
你可以看到触发器的定义:
sp_depends <trigger_name>
还将显示与触发器相关的所有表
【讨论】:
【参考方案2】:选择 * 来自系统对象 其中 type = 'TR'
取自here。
【讨论】:
谢谢雷,我昨天一直在搜索,但没有找到那篇文章。它有大量有用的信息。 我会在您的答案中添加我的答案说明,但我无法编辑答案。我想是因为我在创建问题时没有检查社区 wiki。【参考方案3】:显示触发器并为表创建 sql:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
【讨论】:
【参考方案4】: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
【讨论】:
【参考方案5】:我相信存在(或至少“曾经”)依赖信息并不总是准确的问题。因此,我会尝试这样处理它:
select name
from sysobjects
where xtype='TR'
and id in (select id from syscomments where text like '%MY-TABLE-NAME%')
祝你好运。
PS-这是未经测试的代码,如果不起作用,请发表评论,我会修复它。
【讨论】:
【参考方案6】:-
打开 Sybase Central 并导航到触发器视图。
单击“对象名称”列进行排序。
“对象名称”列显然显示了与触发器关联的表。向下滚动到您感兴趣的表格。
【讨论】:
【参考方案7】:我将使用以下代码来确保您获得正确的对象。从 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'
【讨论】:
【参考方案8】:我使用的是 SQL Anywhere 16,很容易找到特定表的触发器。打开表格时,有一个名为“触发器”的选项卡。但是查找所有触发器的查询与上面的答案有点不同:
select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
【讨论】:
以上是关于如何识别与 sybase 数据库中的表关联的触发器?的主要内容,如果未能解决你的问题,请参考以下文章