Как определить триггеры, связанные с таблицей в базе данных sybase?
Я использую SQL Advantage и должен знать, что такое SQL для идентификации триггеров, связанных с таблицей. У меня нет возможности использовать другой инструмент, поэтому хорошее старомодное решение SQL-идеальный ответ.
8 ответов
узнал, что
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 - это непроверенный код, оставьте комментарий, если он не работает, и я его исправлю.
- откройте Sybase Central и перейдите к представлению триггеров.
- нажмите на столбец "Имя объекта" для сортировки.
столбец "Имя объекта", по-видимому, показывает таблицу, связанную с триггером. Прокрутите вниз до интересующего вас стола.
Я бы использовал следующий код, чтобы убедиться, что вы получаете правильные объекты. Поскольку 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%'