Moments auxquels les notifications de requêtes se produisent
Le concept sous-jacent aux notifications de requêtes est que l'application peut reposer sur les données mises en cache jusqu'à l'arrivée d'un message de notification. Si SQL Server ne peut plus garantir la fiabilité des données mises en cache, SQL Server envoie un message de notification. SQL Server envoie une notification de requête pour un abonnement lorsque l'un des événements suivants se produit :
Les lignes contenues dans les résultats de la requête sont susceptibles d'avoir changé.
L'abonnement expire.
Le serveur redémarre.
L'abonnement aux notifications de requêtes n'a pas pu être créé (par exemple, l'instruction SELECT n'est pas conforme aux contraintes spécifiées dans la section Création d'une requête pour notification).
Le serveur est affecté par la charge de travail.
Des objets dont dépend l'abonnement sont supprimés ou modifiés.
SQL Server peut générer une notification de requête en réponse aux événements qui ne changent pas les données ou à une modification qui n'affecte pas réellement les résultats de la requête. Par exemple, lorsqu'une instruction UPDATE modifie l'une des lignes retournées par la requête, la notification peut être déclenchée même si la mise à jour de la ligne n'a pas changé les colonnes dans les résultats de la requête. Les notifications de requêtes sont conçues pour prendre en charge l'objectif d'amélioration globale des performances des applications qui mettent les données en cache. Lorsque le serveur est affecté par la charge de travail, SQL Server peut générer un message de notification de requête pour l'abonnement au lieu d'essayer de déterminer si les résultats de la requête ont changé.
L'abonnement aux notifications se produit avant que le Moteur de base de données n'exécute chaque instruction de la demande d'abonnement. Par conséquent, si la commande contient une requête et des instructions qui modifient les données renvoyées par celle-ci, l'application peut recevoir un message de notification avant l'achèvement de la commande qui contient la demande d'abonnement.
Chaque abonnement possède une durée de vie minimale spécifique. Au terme de la durée de vie minimale, SQL Server supprime l'abonnement puis crée un message de notification. Le message informe l'application que la notification n'est plus active et SQL Server n'effectue plus le suivi des modifications apportées à la requête.
Lorsque SQL Server démarre, le serveur crée automatiquement des messages de notification de requête pour tous les abonnements aux notifications de requêtes dans la base de données. Cette opération permet aux applications d'actualiser immédiatement les données mises en cache et à SQL Server de démarrer sans traiter la requête dans chaque notification. Lorsque vous supprimez une base de données, le Moteur de base de données génère des messages de notification de requête pour tous les abonnements inscrits dans cette base de données.
Si une demande d'abonnement aux notifications est soumise avec une requête qui ne satisfait pas aux contraintes de notification de requête, la base de données génère immédiatement un message de notification de requête. Ce message informe l'application que la requête n'a pas satisfait aux contraintes d'un abonnement. En outre, étant donné que SQL Server ne peut pas effectuer le suivi des modifications apportées à la requête, l'application doit immédiatement considérer les résultats de celle-ci comme étant obsolètes.
[!REMARQUE]
Un abonnement aux notifications de requêtes géré par un objet de dépendance, tel que SqlDependency dans ADO.NET, ne génère pas d'événement en cas d'échec de la connexion entre l'application et la base de données. Toutefois, lorsque l'application peut de nouveau atteindre la base de données, elle reçoit immédiatement toutes les notifications créées lorsque celle-ci était inaccessible.
Lorsqu'une commande génère un message de notification, le processus de création et d'envoi d'un message de notification se produit dans le cadre d'une instruction, au sein de la transaction qui produit le message. Si le Moteur de base de données ne parvient pas à créer et à envoyer le message de notification, la commande se solde par un échec, consigné dans le journal des erreurs de SQL Server. Qu'il puisse ou non générer correctement le message de notification, le Moteur de base de données supprime l'abonnement aux notifications lorsque le message de notification est produit.
[!REMARQUE]
Un abonnement est supprimé sans que soit généré un message de notification lorsque le compte d'utilisateur de base de données qui a créé l'abonnement est supprimé ou désactivé, que la base de données qui contient l'abonnement est attachée ou que l'instruction KILL QUERY NOTIFICATION SUBSCRIPTION est utilisée pour supprimer l'abonnement.