2011-10-19 19 views
7

Sembra che siano consentiti poiché è possibile vedere entrambi i trigger di inserimento elencati sotto la tabella con nomi diversi. È una pratica comune o cattiva? Sto usando SQL Server 2005Posso avere due diversi trigger di inserimento sulla stessa tabella?

+0

Cosa fanno i trigger? La tabella 'INSERTED' non è indicizzata, quindi per motivi di prestazioni potrebbe essere meglio consolidarli. –

risposta

11

Sì, è possibile avere più di un trigger per ogni operazione, ad es. AFTER INSERT o AFTER UPDATE ecc. Ha senso suddividere le preoccupazioni separate in blocchi di codice separati, piccoli e gestibili.

L'unica cosa su cui non si può fare affidamento è che verranno eseguiti in un certo ordine - l'ordine in cui i trigger sono effettivamente eseguiti anche non deve essere stabile, cioè lo stesso ogni volta.

+3

Dipende da RDBMS. Postgres garantisce che più trigger si chiamino in ordine alfa del nome. Dichiarano che lo standard SQL (raramente seguito) è in ordine di creazione. –

+1

@AndrewLazarus: mi riferivo a SQL Server (dal momento che l'OP ha chiesto a tale proposito), e SQL Server non ha tale capacità. Grazie per la segnalazione! –

+0

Assolutamente. Aggiungo spesso note come quelle che ritengono che le persone finiscano qui da Google. –

2

è una buona pratica perché in questo modo è possibile suddividere i cambiamenti nel tempo in piccoli blocchi (agili) e aggiungerli o rimuoverli indipendentemente l'uno dall'altro.

+0

BTW se inserisco 2 o più righe alla volta (in pratica sto importando un gruppo di record), c'è un modo per fare riferimento a ogni inserimento, o il trigger viene eseguito automaticamente per ogni singolo inserto? –

+1

Il trigger @hmd verrà eseguito automaticamente per ogni singolo inserimento fino a quando non si utilizzano inserimenti di massa in cui il trigger verrà eseguito una volta per ciascun comando di inserimento bulk. – Niraj

+0

Sappi che è una vecchia domanda! Nel trigger puoi sempre fare riferimento a una tabella chiamata "inserted" che contiene tutte le righe appena inserite (essendo una o più righe su un trigger di inserimento). E creando cursori puoi scorrere ciclicamente ciascuna delle tue file e fare roba a loro se vuoi. – olf

Problemi correlati