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 ärsys
ochuser
.- 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.
- Värdet
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 somSystem.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 somSystem.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 somSystem.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 somtrue
om antingen egenskapen inte finns eller egenskapens värde ärnull
.
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.