SQL-Filtersyntax für Abonnementregeln
SQL-Filter ist einer der verfügbaren Filtertypen für Service Bus-Themenabonnements. Es handelt sich dabei um einen Textausdruck, der auf einer Teilmenge des SQL-92-Standards basiert. Filterausdrücke werden mit dem sqlExpression
-Element der sqlFilter-Eigenschaft einer Service Bus-Rule
in einer Azure Resource Manager-Vorlage oder dem --filter-sql-expression
-Argument eines az servicebus topic subscription rule create
-Befehls in der Azure CLI sowie mehreren SDK-Funktionen für das Verwalten von Abonnementregeln verwendet. Die zulässigen Ausdrücke werden in diesem Abschnitt angezeigt.
Service Bus Premium unterstützt auch die JMS-SQL-Nachrichtenselektorsyntax über die JMS 2.0-API.
<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>
Argumente
<scope>
ist eine optionale Zeichenfolge, die den Bereich von<property_name>
angibt. Gültige Werte sindsys
unduser
.- Der Wert
sys
gibt den Systembereich an, wobei es sich bei<property_name>
um eine der Eigenschaften der Service Bus-Nachricht handelt, wie unter Nachrichten, Nutzlasten und Serialisierung beschrieben. - Der Wert
user
gibt den Benutzerbereich an, wobei es sich bei<property_name>
um einen Schlüssel der benutzerdefinierten Eigenschaften handelt, die Sie beim Senden der Nachricht an die Service Bus-Instanz festlegen können. - Der
user
-Bereich ist der Standardbereich, wenn<scope>
nicht angegeben wird.
- Der Wert
Hinweise
Der Versuch, auf eine nicht existierende Systemeigenschaft zuzugreifen, löst einen Fehler aus, während der Versuch, auf eine nicht existierende Benutzereigenschaft zuzugreifen, keinen Fehler auslöst. Stattdessen wird eine nicht vorhandene Benutzereigenschaft intern als unbekannter Wert ausgewertet. Ein unbekannter Wert wird während der Operatorauswertung speziell behandelt.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumente
<regular_identifier>
ist eine Zeichenfolge, die durch den folgenden regulären Ausdruck dargestellt wird:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Diese Grammatik stellt beliebige Zeichenfolgen dar, die mit einem Buchstaben beginnen, dem ein oder mehrere Unterstriche/Buchstaben/Ziffern folgen.
[:IsLetter:]
stellt beliebige Unicodezeichen dar, die als Unicodebuchstaben kategorisiert werden. System.Char.IsLetter(c)
gibt true
zurück, wenn c
ein Unicodebuchstabe ist.
[:IsDigit:]
stellt beliebige Unicodezeichen dar, die als Dezimalzahlen kategorisiert werden. System.Char.IsDigit(c)
gibt true
zurück, wenn c
eine Unicodeziffer ist.
Ein <regular_identifier>
kann kein reserviertes Schlüsselwort sein.
<delimited_identifier>
ist eine beliebige Zeichenfolge, die in den linken und rechten eckigen Klammer ([]) eingeschlossen ist. Eine rechte eckige Klammer wird als zwei rechte eckige Klammern dargestellt. Hier einige Beispiele für <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
ist eine beliebige Zeichenfolge, die in doppelte Anführungszeichen eingeschlossen ist. Ein doppeltes Anführungszeichen im Bezeichner wird als zwei doppelte Anführungszeichen dargestellt. Die Bezeichner sollten nicht in Anführungszeichen eingeschlossen werden, da sie leicht mit einer Zeichenfolgenkonstante verwechselt werden können. Verwenden Sie einen Begrenzungsbezeichner, wenn möglich. Hier ist ein Beispiel für <quoted_identifier>
:
"Contoso & Northwind"
pattern
<pattern> ::=
<expression>
Hinweise
<pattern>
muss ein Ausdruck sein, der als Zeichenfolge ausgewertet wird. Es wird als ein Muster für den LIKE-Operator verwendet. Es kann die folgenden Platzhalterzeichen enthalten:
%
: Eine Zeichenfolge aus null oder mehr Zeichen._
: Ein einzelnes Zeichen
escape_char
<escape_char> ::=
<expression>
Hinweise
<escape_char>
muss ein Ausdruck sein, der als Zeichenfolge der Länge 1 ausgewertet wird. Es wird als Escapezeichen für den LIKE-Operator verwendet.
Beispielsweise entspricht property LIKE 'ABC\%' ESCAPE '\'
eher ABC%
als einer Zeichenfolge, die mit ABC
beginnt.
Konstante
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumente
<integer_constant>
ist eine Zahlenzeichenfolge, die nicht in Anführungszeichen eingeschlossen ist und keine Dezimaltrennzeichen enthält. Die Werte werden intern alsSystem.Int64
gespeichert und folgen dem gleichen Bereich.Im Folgenden finden Sie Beispiele für long-Konstanten:
1894 2
<decimal_constant>
ist eine Zahlenzeichenfolge, die nicht in Anführungszeichen eingeschlossen ist und ein Dezimaltrennzeichen enthält. Die Werte werden intern alsSystem.Double
gespeichert und folgen dem gleichen Bereich/der gleichen Genauigkeit.In einer zukünftigen Version wird diese Zahl möglicherweise in einem anderen Datentyp gespeichert, zur Unterstützung der genauen Zahlensemantik, daher sollten Sie sich nicht darauf verlassen, dass der zugrunde liegende Datentyp
System.Double
für<decimal_constant>
ist.Es folgen Beispiele von Dezimalkonstanten:
1894.1204 2.0
<approximate_number_constant>
ist eine in wissenschaftlicher Notation geschriebene Zahl. Die Werte werden intern alsSystem.Double
gespeichert und folgen dem gleichen Bereich/der gleichen Genauigkeit. Es folgen Beispiele für die ungefähren Zahlenkonstanten:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Hinweise
Boolesche Konstanten werden durch die Schlüsselwörter TRUE oder FALSE dargestellt. Die Werte werden als System.Boolean
gespeichert.
string_constant
<string_constant>
Hinweise
Zeichenfolgenkonstanten werden in einfache Anführungszeichen eingeschlossen und enthalten beliebige, gültige Unicodezeichen. Ein einfaches Anführungszeichen, das in eine Zeichenfolgenkonstante eingebettet ist, wird als zwei einfache Anführungszeichen dargestellt.
Funktion
<function> :=
newid() |
property(name) | p(name)
Hinweise
Die newid()
-Funktion gibt ein System.Guid
zurück, das von der System.Guid.NewGuid()
-Methode generiert wird.
Die Funktion property(name)
gibt den Wert der Eigenschaft zurück, auf die von name
verwiesen wird. Der Wert name
kann ein beliebiger, gültiger Ausdruck sein, der einen Zeichenfolgenwert zurückgibt.
Überlegungen
Beachten Sie die folgende SQL-Filtersemantik:
Bei Eigenschaftennamen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Operatoren folgen, wann immer möglich, der C#-impliziten Konvertierungssemantik.
Systemeigenschaften sind beliebige Eigenschaften der Service Bus-Nachricht, wie unter Nachrichten, Nutzlasten und Serialisierung beschrieben.
Berücksichtigen Sie die folgende
IS [NOT] NULL
-Semantik:property IS NULL
wird alstrue
ausgewertet, wenn die Eigenschaft entweder nicht vorhanden ist oder der Wert der Eigenschaftnull
ist.
Semantik der Eigenschaftsauswertung
Der Versuch, eine nicht existierende Systemeigenschaft auszuwerten, löst eine
FilterException
-Ausnahme aus.Eine Eigenschaft, die nicht vorhanden ist, wird intern als unknown ausgewertet.
Unbekannte Auswertung in arithmetischen Operatoren:
Wenn entweder die linke oder rechte Seite der Operanden für binäre Operatoren als unknown ausgewertet wird, ist das Ergebnis unknown.
Wenn für unäre Operatoren ein Operand als unknown ausgewertet wird, lautet das Ergebnis unknown.
Unbekannte Auswertung in binären Vergleichsoperatoren:
Wenn entweder die linke oder rechte Seite der Operanden als unknown ausgewertet wird, ist das Ergebnis unknown.
Unbekannte Auswertung in
[NOT] LIKE
:Wenn ein beliebiger Operand als unknown ausgewertet wird, lautet das Ergebnis unknown.
Unbekannte Auswertung in
[NOT] IN
:Wenn der linke Operand als unknown ausgewertet wird, lautet das Ergebnis unknown.
Unbekannte Auswertung im AND-Operator:
+---+---+---+---+
|AND| T | F | U |
+---+---+---+---+
| T | T | F | U |
+---+---+---+---+
| F | F | F | F |
+---+---+---+---+
| U | U | F | U |
+---+---+---+---+
Unbekannte Auswertung im OR-Operator:
+---+---+---+---+
|OR | T | F | U |
+---+---+---+---+
| T | T | T | T |
+---+---+---+---+
| F | T | F | U |
+---+---+---+---+
| U | T | U | U |
+---+---+---+---+
Semantik der Operatorenbindung
Vergleichsoperatoren wie
>
,>=
,<
,<=
,!=
und=
folgen der gleichen Semantik wie der C#-Operator, der Datentypaktionen und implizite Konvertierungen einbindet.Arithmetische Operatoren wie
+
,-
,*
,/
und%
folgen der gleichen Semantik wie der C#-Operator, der Datentypaktionen und implizite Konvertierungen einbindet.
Beispiele
Beispiele finden Sie unter Festlegen von Abonnementfiltern (Azure Service Bus).