如何识别与sybase数据库中的表关联的触发器?

问题描述:

我正在使用SQL Advantage,需要知道SQL是用来识别与表关联的触发器的。我没有选择使用其他工具,所以老式的SQL解决方案是理想的答案。如何识别与sybase数据库中的表关联的触发器?

我还发现,

sp_depends <object_name> 

会告诉你很多关于表的信息,包括所有与之相关的触发器。通过使用它,与Ray的查询一起可以更容易地找到触发器。从雷的链接文章这个查询相结合:

sp_helptext <trigger_name> 

,你可以看到触发的定义:

sp_depends <trigger_name> 

也将告诉你相关的触发

select * 
from sysobjects 
where type = 'TR'

摘自here

+0

谢谢雷,我昨天一直在搜索,但从未找到那篇文章。它在那里拥有丰富的有用信息。 – 2008-11-26 18:06:34

我相信所有的表(或者至少是'是')某些依赖信息并不总是准确的问题。因此,我会尝试像这样来处理它:

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%' 

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 

  1. 打开Sybase Central并导航到触发查看。
  2. 点击“对象名称”列进行排序。

“对象名称”列显然显示与触发器关联的表。向下滚动至您感兴趣的表格。

我会使用以下代码,以确保您获得正确的对象。由于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'