Domanda

Sto usando SQL Advantage e ho bisogno di sapere quale sia l'SQL per identificare i trigger associati a una tabella. Non ho la possibilità di utilizzare un altro strumento, quindi la buona soluzione SQL vecchio stile è la risposta ideale.

È stato utile?

Soluzione

L'ho scoperto anche

sp_depends <object_name> 

ti mostrerà molte informazioni su una tabella, inclusi tutti i trigger associati ad essa. Usarlo, insieme alla query di Ray, può rendere molto più facile trovare i trigger. Combinato con questa query dall'articolo collegato di Ray:

sp_helptext <trigger_name>

e puoi vedere la definizione del trigger:

sp_depends <trigger_name>

ti mostrerà anche tutte le tabelle relative a un trigger

Altri suggerimenti

select *
from sysobjects
where type = 'TR'

Tratto da qui .

per mostrare i trigger e creare sql per una tabella:

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

Credo che ci sia (o almeno 'era') qualche problema in cui le informazioni sulla dipendenza non sono sempre accurate. Quindi tenterei di affrontarlo in questo modo:

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

Buona fortuna.

PS: questo è un codice non testato, lascia un commento se non funziona e lo risolverò.

  1. Apri Sybase Central e vai alla vista dei trigger.
  2. Fai clic su " Nome oggetto " colonna da ordinare.

Il nome oggetto " apparentemente la colonna mostra la tabella associata al trigger. Scorri verso il basso fino al tavolo che ti interessa.

Vorrei usare il seguente codice, per assicurarmi di ottenere gli oggetti giusti. A partire da Sybase 16 questo non sarà più completo, in quanto potrebbero esserci più trigger dello stesso tipo su una tabella.

    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'

Sto usando SQL Anywhere 16 ed è facile trovare i trigger di una tabella specifica. Quando si apre la tabella, è presente una scheda denominata "Trigger". Ma la query per trovare tutti i trigger è leggermente diversa dalle risposte sopra:

select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top