Partager via


Conseils d'utilisation sur l'exécution des déclencheurs de connexion

Cette rubrique traite des instructions relatives à l'ordre d'activation des déclencheurs de connexion et à la gestion des transactions au sein de ces déclencheurs.

Spécification du premier et du dernier déclencheurs

Il est possible de définir plusieurs déclencheurs sur l'événement LOGON. Ces déclencheurs peuvent peut être désignés comme le premier ou dernier déclencheur à être activé sur un événement à l'aide de la procédure stockée système sp_settriggerorder. SQL Server ne garantit pas l'ordre d'exécution des déclencheurs restants. Pour plus d'informations, consultez Conception et implémentation du stockage structuré (moteur de base de données).

Gestion des transactions

Avant que SQL Server n'exécute un déclencheur de connexion, SQL Server crée une transaction implicite qui est indépendante d'une transaction utilisateur. Par conséquent, à l'exécution du premier déclencheur de connexion, le nombre de transactions est 1. Après l'exécution de tous les déclencheurs de connexion, la transaction est validée. En ce qui concerne les autres types de déclencheurs, SQL Server retourne une erreur si l'exécution d'un déclencheur de connexion se termine avec un décompte des transaction de 0. L'instruction ROLLBACK TRANSACTION rétablit le décompte des transactions à 0, même si l'instruction est émise au sein d'une transaction imbriquée. L'instruction COMMIT TRANSACTION peut décrémenter le décompte des transactions jusqu'à 0. Par conséquent, il est déconseillé d'émettre des instructions COMMIT TRANSACTION au sein de déclencheurs de connexion.

Tenez compte des points suivants lorsque vous utilisez une instruction ROLLBACK TRANSACTION au sein de déclencheurs de connexion :

  • Les modifications de données effectuées jusqu'au point de l'instruction ROLLBACK TRANSACTION sont restaurées. Ces modifications incluent les modifications effectuées par le déclencheur actif et celles effectuées par les déclencheurs précédents qui se sont exécutés sur le même événement. Les déclencheurs restants pour l'événement spécifique ne sont pas exécutés.

  • Le déclencheur actif continue d'exécuter les instructions restantes qui suivent l'instruction ROLLBACK. Si l'une de ces instructions modifie les données, les modifications ne sont pas restaurées.

Une session utilisateur n'est pas établie si une des conditions suivantes se produit au cours de l'exécution d'un déclencheur sur un événement LOGON :

  • La transaction implicite d'origine est restaurée ou échoue.

  • Une erreur dont la gravité est supérieure à 20 est levée dans le corps du déclencheur.