Sql-åtgärdssyntax för prenumerationsregel
En SQL-åtgärd används för att manipulera meddelandemetadata när ett meddelande har valts av ett filter för en prenumerationsregel. Det är ett textuttryck som lutar sig mot en delmängd av SQL-92-standarden. Åtgärdsuttryck används med elementet sqlExpression
i egenskapen "action" för en Service Bus Rule
i en Azure Resource Manager-mall, eller Azure CLI-kommandots az servicebus topic subscription rule create
--action-sql-expression
argument och flera SDK-funktioner som tillåter hantering av prenumerationsregler.
<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>
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
Kommentarer
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:]]*
Det innebär att 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>
Kommentarer
<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>
Kommentarer
<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.Följande ä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
Kommentarer
Booleska konstanter representeras av nyckelorden TRUE
eller FALSE
. Värdena lagras som System.Boolean
.
string_constant
<string_constant>
Kommentarer
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)
newid()
För närvarande och property(name)
är de enda funktioner som stöds.
Kommentarer
- Funktionen
newid()
returnerar enSystem.Guid
som genereras avSystem.Guid.NewGuid()
metoden. - Funktionen
property(name)
returnerar värdet för egenskapen som refereras avname
. Värdetname
kan vara valfritt giltigt uttryck som returnerar ett strängvärde.
Exempel
Exempel finns i Service Bus-filterexempel.
Att tänka på
- SET används för att skapa en ny egenskap eller uppdatera värdet för en befintlig egenskap.
- REMOVE används för att ta bort en användaregenskap. Endast användaregenskaper kan tas bort, inte systemegenskaper.
- SET utför implicit konvertering om möjligt när uttryckstypen och den befintliga egenskapstypen skiljer sig.
- Åtgärden misslyckas om obefintliga systemegenskaper refererades.
- Åtgärden misslyckas inte om inga icke-existerande användaregenskaper refererades till.
- En icke-existerande användaregenskap utvärderas som "Okänd" internt och följer samma semantik som SQLRuleFilter vid utvärdering av operatorer.
Viktiga punkter
Här är några viktiga punkter:
- Endast egenskaper för ett meddelande kan ändras.
- Alla användaregenskaper kan ändras.
- Alla offentligt uppdaterade systemegenskaper kan också ändras, till exempel
ReplyTo
ochCorrelationId
, men vi rekommenderar att du inte ändrar systemegenskaper som en del av en regelåtgärd. Det tillåts fortfarande av bakåtkompatibilitetsskäl. - När du anger egenskaper tillåts endast numeriska, booleska och strängliteraler. En strängliteral konverteras i sin tur till en typ baserat på den egenskap som ändras. Om egenskapen som anges inte redan finns finns det ingen typkonvertering från strängen. Om egenskapen som ändras redan finns och dess värde är en av dessa typer
Guid
, ,DateTimeOffset
TimeSpan
,Uri
,DateTime
, konverteras strängliteralen till den typen och anges som egenskapsvärde. För att vara mer specifik försöker åtgärden konvertera strängliteralen till typen av egenskap. Om det lyckas anges egenskapen. Annars utlöser utvärderingen av regelåtgärden ett undantag och meddelandet är obeställt.