Syntaxe akce SQL pravidla předplatného
Akce SQL slouží k manipulaci s metadaty zpráv po výběru zprávy filtrem pravidla odběru. Jedná se o textový výraz, který se spoléhá na podmnožinu standardu SQL-92. Výrazy akcí se používají s prvkem sqlExpression
vlastnosti action služby Service Bus Rule
v šabloně Azure Resource Manageru nebo s argumentem příkazu --action-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.
<statements> ::=
<statement> [, ...n]
<statement> ::=
<action> [;]
Remarks
-------
Semicolon is optional.
<action> ::=
SET <property> = <expression>
REMOVE <property>
<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:]]*
Znamená to, že 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 TRUE
nebo FALSE
. 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)
newid()
property(name)
V současné době jsou jediné podporované funkce.
Poznámky
- Funkce
newid()
vrátí vygenerovanouSystem.Guid
metodouSystem.Guid.NewGuid()
. - Funkce
property(name)
vrátí hodnotu vlastnosti, na kterouname
odkazuje . Hodnotaname
může být libovolný platný výraz, který vrací řetězcovou hodnotu.
Příklady
Příklady najdete v příkladech filtru služby Service Bus.
Důležité informace
- SET slouží k vytvoření nové vlastnosti nebo aktualizaci hodnoty existující vlastnosti.
- Funkce REMOVE slouží k odebrání vlastnosti uživatele. Odebrat lze pouze vlastnosti uživatele, nikoli systémové vlastnosti.
- FUNKCE SET provádí implicitní převod, pokud je to možné, pokud je typ výrazu a existující typ vlastnosti odlišné.
- Akce selže, pokud byly odkazovány neexistující systémové vlastnosti.
- Akce se nezdaří, pokud byly odkazovány neexistující vlastnosti uživatele.
- Neexistující vlastnost uživatele se vyhodnocuje interně jako neznámá, protože při vyhodnocování operátorů následuje stejná sémantika jako SQLRuleFilter .
Důležité body
Tady je několik důležitých bodů:
- Lze upravit pouze vlastnosti zprávy.
- Lze upravit všechny vlastnosti uživatele.
- Všechny veřejně aktualizovatelné systémové vlastnosti lze také upravit, například
ReplyTo
aCorrelationId
, ale doporučujeme neměnit systémové vlastnosti jako součást akce pravidla. Je stále povolený z důvodu zpětné kompatibility. - Při nastavování vlastností jsou povoleny pouze číselné, logické a řetězcové literály. Řetězcový literál je převeden na typ založený na změně vlastnosti. Pokud sada vlastností ještě neexistuje, neexistuje žádný převod typu z řetězce. Pokud vlastnost, kterou upravujete, již existuje a její hodnota je jedním z těchto typů
Guid
,Uri
DateTimeOffset
TimeSpan
DateTime
, pak řetězcový literál je převeden na tento typ a nastaven jako hodnota vlastnosti. Chcete-li být konkrétnější, akce se pokusí převést řetězcový literál na typ vlastnosti. Pokud je tato vlastnost úspěšná, nastaví se tato vlastnost. Jinak vyhodnocení akce pravidla vyvolá výjimku a zpráva je nedoručené.