Sql 如何识别与sybase数据库中的表关联的触发器?
我正在使用SQL Advantage,需要知道什么是SQL来识别与表关联的触发器。我没有选择使用其他工具,因此老式的SQL解决方案是理想的解决方案。select* select * from sysobjects where type = 'TR' 来自sysobjects 其中type='TR' 摘自。我还发现Sql 如何识别与sybase数据库中的表关联的触发器?,sql,triggers,sybase,Sql,Triggers,Sybase,我正在使用SQL Advantage,需要知道什么是SQL来识别与表关联的触发器。我没有选择使用其他工具,因此老式的SQL解决方案是理想的解决方案。select* select * from sysobjects where type = 'TR' 来自sysobjects 其中type='TR' 摘自。我还发现 sp_depends <object_name> sp_取决于 将向您显示有关表的大量信息,包括与之关联的所有触发器。使用它,再加上Ray的查询,可以更容易地找到触发
sp_depends <object_name>
sp_取决于
将向您显示有关表的大量信息,包括与之关联的所有触发器。使用它,再加上Ray的查询,可以更容易地找到触发器。结合Ray链接文章中的此查询:
sp_helptext <trigger_name>
sp\u帮助文本
您可以看到触发器的定义:
sp_depends <trigger_name>
sp_取决于
还将向您显示与触发器相关的所有表我相信存在(或至少是“曾经”)某些依赖项信息不总是准确的问题。因此,我将尝试这样处理:
select name
from sysobjects
where xtype='TR'
and id in (select id from syscomments where text like '%MY-TABLE-NAME%')
祝你好运
PS这是未经测试的代码,如果不起作用,请留下注释,我会修复它。要显示触发器并为表创建sql,请执行以下操作:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
“Object Name”列显然显示了与触发器关联的表。向下滚动到您感兴趣的表。我将使用以下代码,以确保您获得正确的对象。由于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'
我使用的是SQLAnywhere 16,很容易找到特定表的触发器。打开表时,会出现一个名为“触发器”的选项卡。但是查找所有触发器的查询与上面的答案有点不同:
select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
谢谢你,雷,我昨天找了很久,但没找到那篇文章。这里面有大量有用的信息。我本想在你的答案中添加我的答案澄清,但我无法编辑答案。我想是因为我在创建问题时没有检查社区维基。
select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'