Messages de notifications de requêtes
Un message de notification de requête contient un document XML. Chaque message comprend le motif de sa création et le message de la notification inclus lors de la création de celle-ci.
Les attributs de l'élément QueryNotification identifient le motif du message, tandis que l'élément Message contient l'ID de notification de l'abonnement. Par exemple, le document XML affiché ci-après est un message de notification de requête complet, modifié dans sa forme dans un souci de lisibilité :
<qn:QueryNotification
xmlns:qn="https://schemas.microsoft.com/SQL/Notifications/QueryNotification"
Type="change" Source="data" Info="insert">
<qn:Message>http://mysite.microsoft.com/catalog.aspx?Category=Cars</qn:Message>
</qn:QueryNotification>
Ce message de notification de requête indique qu'une instruction INSERT a modifié les données de l'abonnement avec le message, "http://mysite.microsoft.com/catalog.aspx?Category=Cars".
[!REMARQUE]
Étant donné que la notification est remise sous la forme d'un document XML, le moteur de base de données associe un caractère d'échappement aux caractères qui ne sont pas valides dans un document XML. Par exemple, si le message soumis avec l'abonnement contient le caractère <, le document XML renvoyé le convertit en <.
Les tableaux suivants répertorient les valeurs de chaque attribut. SQL Server génère uniquement certaines combinaisons d'attributs. Par exemple, étant donné qu'un attribut Type égal à change requiert la création préalable de l'abonnement, cet attribut n'est jamais combiné avec un attribut Source égal à statement.
Les messages de notifications de requêtes appartiennent à deux types principaux, différenciés par la valeur de l'attribut Type. Pour indiquer que les résultats de la requête ont changé, le moteur de base de données crée un message de type change. Pour indiquer que la demande d'abonnement a échoué, le moteur de base de données crée un message de type subscribe. Les valeurs des deux autres attributs indiquent la raison pour laquelle SQL Server a créé le message.
Messages de modification
Lorsqu'une modification susceptible d'affecter les résultats d'une requête se produit, SQL Server génère un message de type change. Le tableau suivant décrit les messages de modification :
Source |
Info |
Description |
|---|---|---|
data |
truncate |
Une ou plusieurs des tables référencées dans la requête ont été tronquées. |
data |
insert |
SQL Server a traité une instruction INSERT sur une ou plusieurs des tables référencées dans la requête. |
data |
update |
SQL Server a traité une instruction UPDATE sur une ou plusieurs des tables référencées dans la requête. |
data |
delete |
SQL Server a traité une instruction DELETE sur une ou plusieurs des tables référencées dans la requête. |
timeout |
none |
Le délai d'abonnement a expiré. |
object |
drop |
L'un des objets sous-jacents utilisés par la requête a été supprimé. |
object |
alter |
L'un des objets sous-jacents utilisés par la requête a été modifié. |
system |
restart |
SQL Server a démarré. |
system |
error |
Une erreur interne s'est produite dans SQL Server. |
system |
resource |
L'abonnement à la notification a été supprimé en raison de l'état de SQL Server lié , par exemple, à un serveur affecté par la charge de travail. |
Messages d'abonnement
Lorsque SQL Server ne peut pas créer un abonnement, le serveur génère immédiatement un message de type subscribe. Le tableau suivant décrit les messages de type subscribe.
Source |
Info |
Description |
|---|---|---|
statement |
query |
La commande soumise contient une instruction SELECT qui ne satisfait pas aux contraintes d'une notification de requête. |
statement |
invalid |
La commande soumise contient une instruction qui ne prend pas en charge les notifications (par exemple, une instruction INSERT ou UPDATE). |
statement |
previous invalid |
Une commande précédente dans la transaction contient une instruction qui ne prend pas en charge les notifications (par exemple, une instruction INSERT ou UPDATE). |
statement |
set options |
Les options de connexion n'ont pas été correctement définies lorsque la commande a été soumise. |
statement |
isolation |
Le niveau d'isolement n'était pas valide pour la notification de requête (niveau d'isolement SNAPSHOT). |
statement |
query template limit |
Une table spécifiée dans la requête a atteint le nombre maximum de modèles internes. |