Share via


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 sind sys und user.
    • 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.

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 als System.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 als System.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 als System.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 als true ausgewertet, wenn die Eigenschaft entweder nicht vorhanden ist oder der Wert der Eigenschaft null 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).

Nächste Schritte