Delen via


SQL-filtersyntaxis voor abonnementsregel

Een SQL-filter is een van de beschikbare filtertypen voor Service Bus-onderwerpabonnementen. Het is een tekstexpressie die leunt op een subset van de SQL-92-standaard. Filterexpressies worden gebruikt met het sqlExpression element van de eigenschap sqlFilter van een Service Bus Rule in een Azure Resource Manager-sjabloon, of het argument van --filter-sql-expression de Azure CLI-opdrachtaz servicebus topic subscription rule create, en verschillende SDK-functies waarmee abonnementsregels kunnen worden beheerd. De toegestane expressies worden weergegeven in deze sectie.

Service Bus Premium biedt ook ondersteuning voor de JMS SQL-berichtkiezersyntaxis via de 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>  
  

Argumenten

  • <scope> is een optionele tekenreeks die het bereik van de <property_name>. Geldige waarden zijn sys of user.
    • De sys waarde geeft het systeembereik aan waar <property_name> zich een van de eigenschappen van het Service Bus-bericht bevindt, zoals beschreven in berichten, nettoladingen en serialisatie.
    • De user waarde geeft het gebruikersbereik aan waar <property_name> een sleutel is van de aangepaste eigenschappen die u voor het bericht kunt instellen bij het verzenden naar Service Bus.
    • Het user bereik is het standaardbereik als <scope> dit niet is opgegeven.

Opmerkingen

Een poging om toegang te krijgen tot een niet-bestaande systeemeigenschap is een fout, terwijl een poging om toegang te krijgen tot een niet-bestaande gebruikerseigenschap geen fout is. In plaats daarvan wordt een niet-bestaande gebruikerseigenschap intern geëvalueerd als een onbekende waarde. Een onbekende waarde wordt speciaal behandeld tijdens de evaluatie van de operator.

property_name

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

Argumenten

<regular_identifier> is een tekenreeks die wordt vertegenwoordigd door de volgende reguliere expressie:

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

Deze grammatica betekent een tekenreeks die begint met een letter en wordt gevolgd door een of meer onderstrepingstekens/letters/cijfers.

[:IsLetter:] betekent dat elk Unicode-teken dat is gecategoriseerd als een Unicode-letter. System.Char.IsLetter(c) retourneert true als c het een Unicode-letter is.

[:IsDigit:] betekent een Unicode-teken dat is gecategoriseerd als een decimaal cijfer. System.Char.IsDigit(c) retourneert true als c het een Unicode-cijfer is.

Een <regular_identifier> kan geen gereserveerd trefwoord zijn.

<delimited_identifier> is een tekenreeks tussen vierkante haken links/rechts ([]). Een vierkante haak rechts wordt weergegeven als twee vierkante haken rechts. Hier volgen enkele voorbeelden van <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> is een tekenreeks die tussen dubbele aanhalingstekens staat. Een dubbel aanhalingsteken in id wordt weergegeven als twee dubbele aanhalingstekens. Het wordt niet aanbevolen om aanhalingstekens te gebruiken, omdat deze gemakkelijk kan worden verward met een tekenreeksconstante. Gebruik indien mogelijk een id met scheidingstekens. Hier volgt een voorbeeld van <quoted_identifier>:

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

Opmerkingen

<pattern> moet een expressie zijn die wordt geëvalueerd als een tekenreeks. Het wordt gebruikt als patroon voor de LIKE-operator. Deze kan de volgende jokertekens bevatten:

  • %: een tekenreeks van nul of meer tekens.

  • _: Een willekeurig teken.

escape_char

<escape_char> ::=  
      <expression>  

Opmerkingen

<escape_char> moet een expressie zijn die wordt geëvalueerd als een tekenreeks met lengte 1. Het wordt gebruikt als escape-teken voor de LIKE-operator.

Komt bijvoorbeeld property LIKE 'ABC\%' ESCAPE '\' overeen ABC% in plaats van een tekenreeks die begint met ABC.

constant

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

Argumenten

  • <integer_constant> is een tekenreeks met getallen die niet tussen aanhalingstekens staan en geen decimale punten bevatten. De waarden worden als intern opgeslagen System.Int64 en volgen hetzelfde bereik.

    Hier volgen voorbeelden van lange constanten:

    1894  
    2  
    
  • <decimal_constant> is een tekenreeks met getallen die niet tussen aanhalingstekens staan en een decimaalteken bevatten. De waarden worden opgeslagen als System.Double intern en volgen hetzelfde bereik/dezelfde precisie.

    In een toekomstige versie kan dit getal worden opgeslagen in een ander gegevenstype ter ondersteuning van de exacte semantiek van getallen, dus u moet niet vertrouwen op het feit dat het onderliggende gegevenstype voor <decimal_constant>isSystem.Double.

    Hier volgen voorbeelden van decimale constanten:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> is een getal dat is geschreven in wetenschappelijke notatie. De waarden worden opgeslagen als System.Double intern en volgen hetzelfde bereik/dezelfde precisie. Hier volgen enkele voorbeelden van geschatte getalconstanten:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Opmerkingen

Booleaanse constanten worden vertegenwoordigd door de trefwoorden TRUE of FALSE. De waarden worden opgeslagen als System.Boolean.

string_constant

<string_constant>  

Opmerkingen

Tekenreeksconstanten worden tussen enkele aanhalingstekens geplaatst en bevatten eventuele geldige Unicode-tekens. Eén aanhalingsteken dat is ingesloten in een tekenreeksconstante, wordt weergegeven als twee enkele aanhalingstekens.

function

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

Opmerkingen

De newid() functie retourneert een System.Guid gegenereerd door de System.Guid.NewGuid() methode.

De property(name) functie retourneert de waarde van de eigenschap waarnaar wordt verwezen door name. De name waarde kan elke geldige expressie zijn die een tekenreekswaarde retourneert.

Overwegingen

Houd rekening met de volgende sql-filtersemantiek:

  • Eigenschapsnamen zijn niet hoofdlettergevoelig.

  • Operators volgen waar mogelijk impliciete C#-conversiesemantiek.

  • Systeemeigenschappen zijn een van de eigenschappen van het Service Bus-bericht, zoals beschreven in berichten, nettoladingen en serialisatie.

    Houd rekening met de volgende IS [NOT] NULL semantiek:

    • property IS NULL wordt geëvalueerd true alsof de eigenschap niet bestaat of de waarde van de eigenschap is null.

Semantiek voor eigenschapsevaluatie

  • Een poging om een niet-bestaande systeemeigenschap te evalueren, genereert een FilterException uitzondering.

  • Een eigenschap die niet bestaat, wordt intern geëvalueerd als onbekend.

    Onbekende evaluatie in rekenkundige operatoren:

  • Als voor binaire operatoren de linker- of rechterkant van operanden als onbekend wordt geëvalueerd, is het resultaat onbekend.

  • Als voor unaire operators een operand wordt geëvalueerd als onbekend, is het resultaat onbekend.

    Onbekende evaluatie in binaire vergelijkingsoperators:

  • Als de linker- of rechterkant van operanden wordt geëvalueerd als onbekend, is het resultaat onbekend.

    Onbekende evaluatie in [NOT] LIKE:

  • Als een operand wordt geëvalueerd als onbekend, is het resultaat onbekend.

    Onbekende evaluatie in [NOT] IN:

  • Als de linkeroperand als onbekend wordt geëvalueerd, is het resultaat onbekend.

    Onbekende evaluatie in AND-operator :

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

Onbekende evaluatie in OR-operator :

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

Semantiek voor operatorbinding

  • Vergelijkingsoperatoren zoals >, >=, <, , <=en = !=volgen dezelfde semantiek als de C#-operatorbinding in promoties van gegevenstypen en impliciete conversies.

  • Rekenkundige operatoren zoals +, -, *, en % /volg dezelfde semantiek als de C#-operatorbinding in promoties van gegevenstypen en impliciete conversies.

Voorbeelden

Zie Voorbeelden van Service Bus-filter voor voorbeelden.

Volgende stappen