Syntaxe filtru SQL pravidla předplatného
Filtr SQL je jedním z dostupných typů filtrů pro odběry témat služby Service Bus. Jedná se o textový výraz, který se spoléhá na podmnožinu standardu SQL-92. Výrazy filtru se používají s prvkem sqlExpression
vlastnosti sqlFilter služby Service Bus Rule
v šabloně Azure Resource Manageru nebo s argumentem příkazu --filter-sql-expression
Azure CLI az servicebus topic subscription rule create
a několika funkcemi sady SDK, které umožňují správu pravidel předplatného. Povolené výrazy se zobrazují v této části.
Service Bus Premium podporuje také syntaxi selektoru zpráv JMS SQL prostřednictvím rozhraní API JMS 2.0.
<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>
Argumenty
<scope>
je volitelný řetězec označující obor<property_name>
. Platné hodnoty jsousys
nebouser
.- Hodnota
sys
označuje systémový obor, kde<property_name>
je libovolná z vlastností ve zprávě služby Service Bus, jak je popsáno v části Zprávy, datové části a serializace. - Hodnota
user
označuje obor uživatele, kde<property_name>
je klíč vlastních vlastností, které můžete nastavit ve zprávě při odesílání do služby Service Bus. - Obor
user
je výchozí obor, pokud<scope>
není zadaný.
- Hodnota
Poznámky
Pokus o přístup k neexistující systémové vlastnosti je chyba, zatímco pokus o přístup k neexistující vlastnosti uživatele není chybou. Místo toho je neexistující vlastnost uživatele interně vyhodnocena jako neznámá hodnota. Neznámá hodnota je zpracována speciálně během vyhodnocení operátoru.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumenty
<regular_identifier>
je řetězec reprezentovaný následujícím regulárním výrazem:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Tato gramatika znamená jakýkoli řetězec, který začíná písmenem a za ním následuje jedno nebo více podtržítko/písmeno/číslice.
[:IsLetter:]
znamená jakýkoli znak Unicode, který je zařazen do kategorií jako písmeno Unicode. System.Char.IsLetter(c)
vrátí true
, pokud c
je písmeno Unicode.
[:IsDigit:]
znamená jakýkoli znak Unicode, který je zařazený do kategorií jako desetinná číslice. System.Char.IsDigit(c)
vrátí true
, pokud c
je číslice Unicode.
Nelze <regular_identifier>
použít vyhrazené klíčové slovo.
<delimited_identifier>
je libovolný řetězec uzavřený s hranatými závorkami zleva/doprava ([]). Pravá hranatá závorka je reprezentována jako dvě pravé hranaté závorky. Tady jsou příklady <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
je libovolný řetězec uzavřený s dvojitými uvozovkami. Dvojitá uvozovka v identifikátoru je reprezentována jako dvě dvojité uvozovky. Nedoporučuje se používat uvozované identifikátory, protože se dají snadno zaměňovat s řetězcovou konstantou. Pokud je to možné, použijte identifikátor s oddělovači. Tady je příklad <quoted_identifier>
:
"Contoso & Northwind"
vzor
<pattern> ::=
<expression>
Poznámky
<pattern>
musí být výraz, který se vyhodnotí jako řetězec. Používá se jako vzor pro operátor LIKE. Může obsahovat následující zástupné znaky:
%
: Libovolný řetězec s nulovými nebo více znaky._
: Libovolný jeden znak.
escape_char
<escape_char> ::=
<expression>
Poznámky
<escape_char>
musí být výraz, který se vyhodnotí jako řetězec délky 1. Slouží jako řídicí znak pro operátor LIKE.
Například property LIKE 'ABC\%' ESCAPE '\'
odpovídá ABC%
namísto řetězce, který začíná řetězcem ABC
.
– konstanta
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumenty
<integer_constant>
je řetězec čísel, která nejsou uzavřena v uvozovkách a neobsahují desetinné čárky. Hodnoty se ukládají interněSystem.Int64
a dodržují stejný rozsah.Tady jsou příklady dlouhých konstant:
1894 2
<decimal_constant>
je řetězec čísel, která nejsou uzavřena v uvozovkách a obsahují desetinnou čárku. Hodnoty se ukládají interněSystem.Double
a odpovídají stejnému rozsahu a přesnosti.V budoucí verzi může být toto číslo uloženo v jiném datovém typu, aby podporovalo přesnou sémantiku čísel, takže byste neměli spoléhat na skutečnost, že podkladový datový typ je
System.Double
určený<decimal_constant>
.Tady jsou příklady desetinných konstant:
1894.1204 2.0
<approximate_number_constant>
je číslo napsané ve vědeckém zápisu. Hodnoty se ukládají interněSystem.Double
a odpovídají stejnému rozsahu a přesnosti. Tady jsou příklady přibližných číselných konstant:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Poznámky
Logické konstanty jsou reprezentovány klíčovými slovy PRAVDA nebo NEPRAVDA. Hodnoty jsou uloženy jako System.Boolean
.
string_constant
<string_constant>
Poznámky
Řetězcové konstanty jsou uzavřeny v jednoduchých uvozovkách a obsahují všechny platné znaky Unicode. Jednoduchá uvozovka vložená do řetězcové konstanty je reprezentována jako dvě jednoduché uvozovky.
function
<function> :=
newid() |
property(name) | p(name)
Poznámky
Funkce newid()
vrátí vygenerovanou System.Guid
metodou System.Guid.NewGuid()
.
Funkce property(name)
vrátí hodnotu vlastnosti, na kterou name
odkazuje . Hodnota name
může být libovolný platný výraz, který vrací řetězcovou hodnotu.
Důležité informace
Zvažte následující sémantiku filtru SQL:
Názvy vlastností nerozlišují malá a velká písmena.
Operátory následují implicitní sémantiku převodu jazyka C#, kdykoli je to možné.
Systémové vlastnosti jsou některé vlastnosti zprávy služby Service Bus, jak je popsáno v části Zprávy, datové části a serializace.
Zvažte následující
IS [NOT] NULL
sémantiku:property IS NULL
vyhodnotí se, jakotrue
by vlastnost neexistuje nebo hodnota vlastnosti jenull
.
Sémantika vyhodnocení vlastností
Pokus o vyhodnocení neexistující systémové vlastnosti vyvolá
FilterException
výjimku.Vlastnost, která neexistuje, se interně vyhodnotí jako neznámá.
Neznámé vyhodnocení v aritmetických operátorech:
Pokud se u binárních operátorů vyhodnotí levá nebo pravá strana operandů jako neznámá, pak je výsledek neznámý.
Pro unární operátory, pokud je operand vyhodnocen jako neznámý, je výsledek neznámý.
Neznámé vyhodnocení v binárních relačních operátorech:
Pokud je levá nebo pravá strana operandů vyhodnocena jako neznámá, výsledek je neznámý.
Neznámé vyhodnocení v
[NOT] LIKE
:Pokud je některý operand vyhodnocen jako neznámý, je výsledek neznámý.
Neznámé vyhodnocení v
[NOT] IN
:Pokud je levý operand vyhodnocen jako neznámý, je výsledek neznámý.
Neznámé vyhodnocení v operátoru AND :
+---+---+---+---+
|AND| T | F | U |
+---+---+---+---+
| T | T | F | U |
+---+---+---+---+
| F | F | F | F |
+---+---+---+---+
| U | U | F | U |
+---+---+---+---+
Neznámé vyhodnocení v operátoru OR :
+---+---+---+---+
|OR | T | F | U |
+---+---+---+---+
| T | T | T | T |
+---+---+---+---+
| F | T | F | U |
+---+---+---+---+
| U | T | U | U |
+---+---+---+---+
Sémantika vazby operátoru
Relační operátory, například
>
, ,>=
<
,<=
!=
a=
následují stejnou sémantiku jako vazba operátoru jazyka C# v povýšení datového typu a implicitní převody.Aritmetické operátory, například
+
,-
,*
/
a%
následují stejnou sémantiku jako vazba operátoru jazyka C# v povýšení datového typu a implicitní převody.
Příklady
Příklady najdete v příkladech filtru služby Service Bus.