Как определить триггеры, связанные с таблицей в базе данных sybase?

Я использую SQL Advantage и должен знать, что такое SQL для идентификации триггеров, связанных с таблицей. У меня нет возможности использовать другой инструмент, поэтому хорошее старомодное решение SQL-идеальный ответ.

8 ответов


select *
from sysobjects
where type = 'TR'

принято от здесь.


узнал, что

sp_depends <object_name> 

покажет вам много информации о таблице, включая все триггеры, связанные с ним. Используя это, вместе с запросом Рэя может сделать его намного проще найти триггеры. В сочетании с этим запросом из связанной статьи Рэя:

sp_helptext <trigger_name>

и вы можете увидеть определение триггера:

sp_depends <trigger_name>

также покажет вам все таблицы, связанные с триггер


чтобы показать триггеры и создать 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 - это непроверенный код, оставьте комментарий, если он не работает, и я его исправлю.


  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'

Я использую SQL Anywhere 16, и легко найти триггеры определенной таблицы. Когда вы открываете таблицу, есть вкладка с именем "триггеры". Но запрос на поиск всех триггеров немного отличается от ответов выше:

select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'