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 sontsys
ouuser
.- 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é.
- La valeur
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 queSystem.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 queSystem.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 queSystem.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é commetrue
Si la propriété n’existe pas ou si la valeur de la propriété estnull
.
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.