Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les applications qui utilisent des fonctions de notification de requête doivent tenir compte des observations particulières suivantes.
Considération |
Description |
|---|---|
Compte de service pour SQL Server |
Une application ne reçoit pas de notifications d'une instance de SQL Server qui utilise le compte système local comme compte de services. Pour plus d'informations, voir « Configuration des comptes de service Windows » dans la documentation en ligne de SQL Server. |
Réception de notifications |
Aucune notification ne peut être reçue sur les ordinateurs exécutant Windows 95 ou Windows 98. |
Notifications de requête et transactions |
Si plusieurs modifications sont apportées à une transaction affectant un ensemble de données avec une demande de notification enregistrée, un seul événement de notification est envoyé. |
Mises à jour rapides et notifications de requête |
Une application qui utilise des notifications de requête doit tenir compte des cas où une notification se produit immédiatement. En cas de modification de données sur le serveur, un message de notification est envoyé à la file d'attente Service Broker appropriée. Les applications doivent se réenregistrer pour recevoir des notifications supplémentaires. Ainsi, si un ensemble de données est rapidement mis à jour par plusieurs applications, une application peut recevoir une notification, extraire les données, puis obtenir une autre notification de mise à jour presque immédiatement après actualisation du cache. Les applications qui utilisent des notifications de requête doivent être écrites pour tenir compte de ce cas. Si une application utilise des données constamment mises à jour, il se peut qu'une stratégie différente de mise en cache des données soit plus appropriée. |
Paramètres de l'option SET |
Lorsqu'une instruction SELECT est exécutée dans le cadre d'une demande de notification, les options suivantes doivent être définies pour la connexion qui soumet la demande :
|
Écriture de requêtes de notification
Vous pouvez configurer des notifications pour les instructions SELECT et EXECUTE. Avec une instruction EXECUTE, SQL Server enregistre une notification pour la commande exécutée et non l'instruction EXECUTE elle-même. La commande doit répondre aux spécifications et aux limitations d'une instruction SELECT. Lorsqu'une commande qui enregistre une notification contient plus d'une instruction, le moteur de base de données crée une notification pour chaque instruction du lot.
Les notifications de requête sont prises en charge pour les instructions SELECT qui répondent aux spécifications suivantes :
Les colonnes projetées de l'instruction SELECT doivent être explicitement déclarées et les noms des tables doivent être qualifiés avec des noms en deux parties. Cela signifie que toutes les tables référencées dans l'instruction doivent figurer dans la même base de données.
L'instruction ne peut pas utiliser la syntaxe astérisque (*) ou nom_table.* pour spécifier des colonnes.
L'instruction ne peut pas utiliser des colonnes sans nom ou des noms de colonnes dupliqués.
L'instruction doit référencer une table de base.
Les colonnes projetées de l'instruction SELECT ne peuvent pas contenir des expressions d'agrégation sauf si l'instruction utilise une expression GROUP BY. Si une expression GROUP BY est fournie, la liste de sélection peut contenir les fonctions d'agrégation COUNT_BIG() ou SUM(). Toutefois, SUM() ne peut pas être spécifié pour une colonne pouvant être NULL. L'instruction ne peut pas spécifier HAVING, CUBE ou ROLLUP.
Une colonne projetée de l'instruction SELECT qui est utilisée comme expression simple ne doit pas apparaître plus d'une fois.
L'instruction ne doit pas inclure les opérateurs PIVOT ou UNPIVOT.
L'instruction ne doit pas inclure les opérateurs INTERSECT ou EXCEPT.
L'instruction ne doit pas référencer une vue.
L'instruction ne doit contenir aucun des éléments suivants : DISTINCT, COMPUTE, COMPUTE BY et INTO.
L'instruction ne doit pas référencer des variables globales de serveur (@@variable_name).
L'instruction ne doit pas référencer des tables dérivées, des tables temporaires ni des variables de table.
L'instruction ne doit pas référencer des tables ou des vues d'autres bases de données ou serveurs.
L'instruction ne doit pas contenir des sous-requêtes, des jointures externes ni des jointures réflexives.
L'instruction ne doit pas référencer les types d'objets volumineux : text, ntext et image.
L'instruction ne doit pas utiliser les prédicats en texte intégral CONTAINS et FREETEXT.
L'instruction ne doit pas utiliser des fonctions de jeu de lignes, notamment OPENROWSET et OPENQUERY.
L'instruction ne doit utiliser aucune des fonctions d'agrégation suivantes : AVG, COUNT(*), MAX, MIN, STDEV, STDEVP, VAR ou VARP.
L'instruction ne doit utiliser aucune fonction non déterministe, y compris les fonctions de classement et de fenêtrage.
L'instruction ne doit pas contenir d'agrégats définis par l'utilisateur.
L'instruction ne doit pas référencer des tables système ou des vues, y compris des affichages catalogue et des vues de gestion dynamique.
L'instruction ne doit pas inclure des informations FOR BROWSE.
L'instruction ne doit pas référencer une file d'attente.
L'instruction ne doit pas contenir des instructions conditionnelles qui ne peuvent pas être modifiées et qui ne peuvent pas retourner des résultats (par exemple, WHERE 1=0).
Pour plus d'informations, voir « Création d'une requête pour notification » dans la documentation en ligne de SQL Server.