Partager via


Syntaxe de filtre SQL pour les règles d’abonnement

Un filtre SQL est l’un des types de filtres disponibles pour les abonnements aux rubriques Service Bus. Il s’agit d’une expression textuelle qui s’appuie sur un sous-ensemble de la norme SQL-92. Les expressions de filtre sont utilisées avec l’élément sqlExpression de la propriété « sqlFilter » d’un objet Rule Service Bus dans un modèle Azure Resource Manager, avec l’argument --filter-sql-expression de la commande Azure CLI az servicebus topic subscription rule create et avec plusieurs fonctions de Kit de développement logiciel (SDK) qui autorisent la gestion des règles d’abonnement. Les expressions autorisées sont affichées dans cette section.

Service Bus Premium prend également en charge la syntaxe du sélecteur de messages SQL JMS via l’API JMS 2.0.

<predicate ::=  
      { NOT <predicate> }  
      | <predicate> AND <predicate>  
      | <predicate> OR <predicate>  
      | <expression> { = | <> | != | > | >= | < | <= } <expression>  
      | <property> IS [NOT] NULL  
      | <expression> [NOT] IN ( <expression> [, ...n] )  
      | <expression> [NOT] LIKE <pattern> [ESCAPE <escape_char>]  
      | EXISTS ( <property> )  
      | ( <predicate> )  
  
<expression> ::=  
      <constant>   
      | <function>  
      | <property>  
      | <expression> { + | - | * | / | % } <expression>  
      | { + | - } <expression>  
      | ( <expression> )  
  
<property> :=   
       [<scope> .] <property_name>  
  

Arguments

  • <scope> est une chaîne facultative qui indique la portée de <property_name>. Les valeurs valides sont sys ou user.
    • La valeur sys indique l’étendue du système où <property_name> est l’une des propriétés sur le message Service Bus, comme décrit dans Messages, charges utiles et sérialisation.
    • La valeur user indique l’étendue utilisateur, où <property_name> est une clé des propriétés personnalisées que vous pouvez définir sur le message lors d’un envoi à Service Bus.
    • L’étendue de user est l’étendue par défaut si <scope> n’est pas spécifié.

Notes

Une tentative d’accès à une propriété système inexistante est une erreur, tandis qu’une tentative d’accès à une propriété utilisateur inexistante n’en est pas une. Au lieu de cela, une propriété d’utilisateur inexistante est évaluée en interne en tant que valeur inconnue. Une valeur inconnue est traitée spécialement lors de l’évaluation de l’opérateur.

property_name

<property_name> ::=  
     <identifier>  
     | <delimited_identifier>  
  
<identifier> ::=  
     <regular_identifier> | <quoted_identifier> | <delimited_identifier>  
  

Arguments

<regular_identifier> est une chaîne est représentée par l’expression régulière suivante :

[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*  

Cela signifie toute chaîne commençant par une lettre et suivie par un(e) ou plusieurs traits de soulignement/lettres/chiffres.

[:IsLetter:] signifie tout caractère Unicode classé en tant que lettre Unicode. System.Char.IsLetter(c) renvoie true si c est une lettre Unicode.

[:IsDigit:] signifie tout caractère Unicode classé en tant que chiffre décimal. System.Char.IsDigit(c) renvoie true si c est un chiffre Unicode.

Un <regular_identifier> ne peut pas être un mot clé réservé.

<delimited_identifier> correspond à toute chaîne placée entre crochets ([]). Un crochet droit est représenté par deux crochets droits. Voici quelques exemples de <delimited_identifier> :

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> correspond à toute chaîne placée entre guillemets doubles. Un guillemet double dans l’identificateur est représenté par deux guillemets doubles. Il est déconseillé d’utiliser des identificateurs entre guillemets, qui peuvent être facilement confondus avec une constante de chaîne. Utilisez si possible un identificateur délimité. Voici un exemple de <quoted_identifier> :

"Contoso & Northwind"  

modèle

<pattern> ::=  
      <expression>  

Remarques

<pattern> doit être une expression évaluée comme chaîne. Il est utilisé comme modèle pour l’opérateur LIKE. Il peut contenir les caractères génériques suivants :

  • % : Une chaîne de zéro ou plusieurs caractères.

  • _ : n’importe quel caractère unique.

escape_char

<escape_char> ::=  
      <expression>  

Remarques

<escape_char> doit être une expression évaluée comme chaîne dont la longueur est 1. Il est utilisé comme caractère d’échappement pour l’opérateur LIKE.

Par exemple, property LIKE 'ABC\%' ESCAPE '\' correspond à ABC% au lieu d’une chaîne qui commence par ABC.

constant

<constant> ::=  
      <integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL  

Arguments

  • <integer_constant> est une chaîne de nombres qui n’est pas entourée de guillemets et ne contient pas de décimales. Les valeurs sont stockées en tant que System.Int64 en interne et suivent la même plage.

    Voici quelques exemples de constantes longues :

    1894  
    2  
    
  • <decimal_constant> est une chaîne de nombres qui n’est pas entourée de guillemets et qui contient une décimale. Les valeurs sont stockées en tant que System.Double en interne et suivent la même plage/précision.

    Dans une version ultérieure, ce nombre pourrait être stocké dans un autre type de données pour prendre en charge la sémantique exacte des nombres. Vous n’aurez donc pas à compter sur le fait que le type de données sous-jacent soit System.Double pour <decimal_constant>.

    Voici quelques exemples de constantes décimales :

    1894.1204  
    2.0  
    
  • <approximate_number_constant> est un nombre écrit de manière scientifique. Les valeurs sont stockées en tant que System.Double en interne et suivent la même plage/précision. Voici des exemples de constantes numériques approximatives :

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Remarques

Les constantes booléennes sont représentées par les mots-clés TRUE ou FALSE. Les valeurs sont stockées en tant que System.Boolean.

string_constant

<string_constant>  

Remarques

Les constantes de chaîne sont placées entre guillemets simples et incluent tout caractère Unicode valide. Un guillemet simple intégré à une constante de chaîne est représenté par deux guillemets simples.

function

<function> :=  
      newid() |  
      property(name) | p(name)  

Remarques

La fonction newid() renvoie un System.Guid généré par la méthode System.Guid.NewGuid().

La fonction property(name) renvoie la valeur de la propriété référencée par name. La valeur name peut être toute expression valide renvoyant une valeur de chaîne.

Considérations

Tenez compte de la sémantique SqlFilter suivante :

  • Les noms de propriété respectent la casse.

  • Les opérateurs suivent autant que possible la sémantique de conversion implicite C#.

  • Les propriétés sont les propriétés sur le message Service Bus comme décrit dans Messages, charges utiles et sérialisation.

    Examinez la sémantique IS [NOT] NULL suivante :

    • property IS NULL est évalué comme true Si la propriété n’existe pas ou si la valeur de la propriété est null.

Sémantique d’évaluation de la propriété

  • Toute tentative d’évaluer une propriété de système inexistante lève une exception FilterException.

  • Une propriété qui n’existe pas est évaluée en interne comme inconnue.

    Évaluation « inconnue » dans les opérateurs arithmétiques :

  • Pour les opérateurs binaires, si le côté gauche ou droit des opérandes est évalué comme inconnu, le résultat est inconnu.

  • Pour les opérateurs unaires, si un opérande est évalué comme inconnu, le résultat est inconnu.

    Évaluation « inconnue » dans les opérateurs de comparaison binaires :

  • Si le côté gauche ou droit des opérandes est évalué comme inconnu, le résultat est inconnu.

    Évaluation « inconnue » dans [NOT] LIKE :

  • Si un opérande est évalué comme inconnu, le résultat est inconnu.

    Évaluation « inconnue » dans [NOT] IN :

  • Si l’opérande gauche est évalué comme inconnu, le résultat est inconnu.

    Évaluation « inconnue » dans l’opérateur AND :

+---+---+---+---+  
|AND| T | F | U |  
+---+---+---+---+  
| T | T | F | U |  
+---+---+---+---+  
| F | F | F | F |  
+---+---+---+---+  
| U | U | F | U |  
+---+---+---+---+  

Évaluation « inconnue » dans l’opérateur OR :

+---+---+---+---+  
|OR | T | F | U |  
+---+---+---+---+  
| T | T | T | T |  
+---+---+---+---+  
| F | T | F | U |  
+---+---+---+---+  
| U | T | U | U |  
+---+---+---+---+  

Sémantique de liaison d’opérateur

  • Les opérateurs de comparaison, tels que >, >=, <, <=, !=, et = suivent la même sémantique que la liaison d’opérateur C# dans les promotions de type de données et les conversions implicites.

  • Les opérateurs arithmétiques, tels que +, -, *, /, et % suivent la même sémantique que la liaison d’opérateur C# dans les promotions de type de données et les conversions implicites.

Exemples

Pour obtenir des exemples, consultez Exemples de filtres Service Bus.

Étapes suivantes