Sql-filtersyntax för prenumerationsregel

Ett SQL-filter är en av de tillgängliga filtertyperna för Service Bus-ämnesprenumerationer. Det är ett textuttryck som lutar sig mot en delmängd av SQL-92-standarden. Filteruttryck används med elementet sqlExpression i egenskapen "sqlFilter" för en Service Bus Rule i en Azure Resource Manager-mall, eller Azure CLI-kommandots az servicebus topic subscription rule create--filter-sql-expression argument och flera SDK-funktioner som tillåter hantering av prenumerationsregler. De tillåtna uttrycken visas i det här avsnittet.

Service Bus Premium stöder också syntaxen för JMS SQL-meddelandeväljare via JMS 2.0-API:et.

<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>  
  

Argument

  • <scope> är en valfri sträng som anger omfånget för <property_name>. Giltig värden är sys och user.
    • Värdet sys anger systemomfånget där <property_name> är någon av egenskaperna i Service Bus-meddelandet enligt beskrivningen i Meddelanden, nyttolaster och serialisering.
    • Värdet user anger användaromfånget där <property_name> är en nyckel för de anpassade egenskaper som du kan ange för meddelandet när du skickar till Service Bus.
    • Omfånget user är standardomfånget om <scope> det inte har angetts.

Anmärkningar

Ett försök att komma åt en obefintlig systemegenskap är ett fel, medan ett försök att komma åt en icke-existerande användaregenskap inte är ett fel. I stället utvärderas en obefintlig användaregenskap internt som ett okänt värde. Ett okänt värde behandlas särskilt under operatorutvärderingen.

property_name

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

Argument

<regular_identifier> är en sträng som representeras av följande reguljära uttryck:

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

Den här grammatiken innebär alla strängar som börjar med en bokstav och följs av ett eller flera understreck/bokstäver/siffror.

[:IsLetter:] betyder alla Unicode-tecken som kategoriseras som en Unicode-bokstav. System.Char.IsLetter(c) returnerar true om c är en Unicode-bokstav.

[:IsDigit:] betyder alla Unicode-tecken som kategoriseras som en decimalsiffra. System.Char.IsDigit(c) returnerar true om c är en Unicode-siffra.

A <regular_identifier> kan inte vara ett reserverat nyckelord.

<delimited_identifier> är en sträng som omges av hakparenteser till vänster/höger ([]). En höger hakparentes representeras som två höger hakparenteser. Följande är exempel på <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> är en sträng som omges av dubbla citattecken. Ett dubbelt citattecken i identifieraren representeras som två dubbla citattecken. Vi rekommenderar inte att du använder citerade identifierare eftersom det enkelt kan förväxlas med en strängkonstant. Använd en avgränsad identifierare om det är möjligt. Här är ett exempel på <quoted_identifier>:

"Contoso & Northwind"  

mönster

<pattern> ::=  
      <expression>  

Anmärkningar

<pattern> måste vara ett uttryck som utvärderas som en sträng. Det används som ett mönster för LIKE-operatorn. Den kan innehålla följande jokertecken:

  • %: Valfri sträng med noll eller fler tecken.

  • _: Alla enskilda tecken.

escape_char

<escape_char> ::=  
      <expression>  

Anmärkningar

<escape_char> måste vara ett uttryck som utvärderas som en sträng med längd 1. Det används som ett escape-tecken för LIKE-operatorn.

Matchar till exempel property LIKE 'ABC\%' ESCAPE '\'ABC% i stället för en sträng som börjar med ABC.

konstant

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

Argument

  • <integer_constant> är en sträng med tal som inte omges av citattecken och inte innehåller decimaltecken. Värdena lagras som System.Int64 internt och följer samma intervall.

    Här är exempel på långa konstanter:

    1894  
    2  
    
  • <decimal_constant> är en sträng med tal som inte omges av citattecken och som innehåller en decimalpunkt. Värdena lagras som System.Double internt och följer samma intervall/precision.

    I en framtida version kan det här numret lagras i en annan datatyp för att stödja exakta talsemantik, så du bör inte förlita dig på det faktum att den underliggande datatypen är System.Double för <decimal_constant>.

    Följande är exempel på decimalkonstanter:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> är ett tal skrivet i vetenskaplig notation. Värdena lagras som System.Double internt och följer samma intervall/precision. Följande är exempel på ungefärliga talkonstanter:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Anmärkningar

Booleska konstanter representeras av nyckelorden TRUE eller FALSE. Värdena lagras som System.Boolean.

string_constant

<string_constant>  

Anmärkningar

Strängkonstanter omges av enkla citattecken och innehåller alla giltiga Unicode-tecken. Ett enkelt citattecken som är inbäddat i en strängkonstant representeras som två enkla citattecken.

funktion

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

Anmärkningar

Funktionen newid() returnerar en System.Guid som genereras av System.Guid.NewGuid() metoden.

Funktionen property(name) returnerar värdet för egenskapen som refereras av name. Värdet name kan vara valfritt giltigt uttryck som returnerar ett strängvärde.

Överväganden

Överväg följande Sql Filter-semantik:

  • Egenskapsnamn är skiftlägeskänsliga.

  • Operatorer följer implicit konverteringssemantik för C# när det är möjligt.

  • Systemegenskaper är någon av egenskaperna i Service Bus-meddelandet enligt beskrivningen i Meddelanden, nyttolaster och serialisering.

    Tänk på följande IS [NOT] NULL semantik:

    • property IS NULL utvärderas som true om antingen egenskapen inte finns eller egenskapens värde är null.

Semantik för egenskapsutvärdering

  • Ett försök att utvärdera en obefintlig systemegenskap utlöser ett FilterException undantag.

  • En egenskap som inte finns utvärderas internt som okänd.

    Okänd utvärdering i aritmetiska operatorer:

  • Om antingen vänster eller höger sida av operander utvärderas som okänd för binära operatorer är resultatet okänt.

  • Om en operand utvärderas som okänd för unary-operatorer är resultatet okänt.

    Okänd utvärdering i binära jämförelseoperatorer:

  • Om antingen vänster eller höger sida av operander utvärderas som okänd är resultatet okänt.

    Okänd utvärdering i [NOT] LIKE:

  • Om någon operand utvärderas som okänd är resultatet okänt.

    Okänd utvärdering i [NOT] IN:

  • Om den vänstra operanden utvärderas som okänd är resultatet okänt.

    Okänd utvärdering i AND-operatorn :

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

Okänd utvärdering i OR-operatorn :

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

Operatorbindningssemantik

  • Jämförelseoperatorer som >, >=, <, <=, !=och = följer samma semantik som C#-operatorbindningen i kampanjer för datatyper och implicita konverteringar.

  • Aritmetiska operatorer som +, -, *, /och % följer samma semantik som C#-operatorbindningen i kampanjer för datatyp och implicita konverteringar.

Exempel

Exempel finns i Service Bus-filterexempel.

Nästa steg