Как вы определяете триггеры, связанные с таблицей в базе данных Sybase? - PullRequest
8 голосов
/ 25 ноября 2008

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

Ответы [ 8 ]

11 голосов
/ 26 ноября 2008

Я также узнал, что

sp_depends <object_name> 

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

sp_helptext <trigger_name>

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

sp_depends <trigger_name>

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

10 голосов
/ 26 ноября 2008
select *
from sysobjects
where type = 'TR'

Взято из здесь .

5 голосов
/ 11 января 2011

, чтобы показать триггеры и создать sql для таблицы:

select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
3 голосов
/ 30 декабря 2011
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 голос
/ 29 ноября 2008

Я полагаю, что есть (или, по крайней мере, «было») некоторая проблема, когда информация о зависимостях не всегда точна Поэтому я попытался бы подойти к этому так:

select name
from sysobjects
where xtype='TR'
and id in (select id from syscomments where text like '%MY-TABLE-NAME%')

Удачи.

PS - это непроверенный код, оставьте комментарий, если он не работает, и я исправлю это.

0 голосов
/ 11 сентября 2018

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

select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
0 голосов
/ 30 сентября 2016

Я бы использовал следующий код, чтобы убедиться, что вы получаете нужные объекты. Начиная с 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'
0 голосов
/ 19 июня 2015
  1. Откройте Sybase Central и перейдите к представлению триггеров.
  2. Нажмите на столбец «Имя объекта» для сортировки.

Столбец «Имя объекта», по-видимому, показывает таблицу, связанную с триггером. Прокрутите вниз до интересующего вас стола.

...