Linee guida per l'esecuzione di trigger LOGON
In questo argomento vengono illustrate le linee guida per l'impostazione dell'ordine di attivazione dei trigger LOGON e per la gestione delle transazioni all'interno di trigger LOGON.
Impostazione del primo e ultimo trigger
È possibile definire più trigger per l'evento LOGON. Uno qualsiasi di questi trigger può essere designato come primo o ultimo trigger da attivare per un evento tramite la stored procedure di sistema sp_settriggerorder. SQL Server non garantisce l'ordine di esecuzione dei trigger rimanenti. Per ulteriori informazioni, vedere Progettazione e implementazione di un'archiviazione strutturata (Motore di database).
Gestione delle transazioni
Prima dell'attivazione di un trigger LOGON, SQL Server crea una transazione implicita indipendente da qualsiasi altra transazione utente. Per questo motivo, quando viene attivato il primo trigger LOGON il numero di transazioni è 1 e al termine dell'esecuzione di tutti i trigger LOGON viene eseguito il commit della transazione. Come per tutti gli altri tipi di trigger, SQL Server restituisce un errore se l'esecuzione di un trigger LOGON viene completata con un numero di transazioni pari a 0. L'istruzione ROLLBACK TRANSACTION reimposta il numero di transazioni su 0, anche se viene eseguita all'interno di una transazione nidificata. L'istruzione COMMIT TRANSACTION potrebbe ridurre il numero di transazioni a 0. È pertanto consigliabile evitare l'esecuzione di istruzioni COMMIT TRANSACTION all'interno di trigger LOGON.
Tenere presenti le considerazioni seguenti per l'utilizzo di un'istruzione ROLLBACK TRANSACTION all'interno di trigger LOGON:
Viene eseguito il rollback di qualsiasi modifica dei dati eseguita fino al punto dell'istruzione ROLLBACK TRANSACTION. Sono incluse le modifiche apportate dal trigger corrente e quelle apportate da trigger precedenti eseguiti sullo stesso evento. Gli eventuali trigger rimanenti per l'evento specifico non vengono eseguiti.
Il trigger corrente continua l'esecuzione delle istruzioni rimanenti successive all'istruzione ROLLBACK. Se tali istruzioni modificano i dati, non viene eseguito il rollback delle modifiche eseguite.
Non viene stabilita una sessione utente se si verifica una della condizioni seguenti durante l'esecuzione di un trigger per un evento LOGON:
Viene eseguito il rollback della transazione implicita originale o la transazione ha esito negativo.
Viene generato un errore con gravità maggiore di 20 all'interno del corpo del trigger.