Sql-actiesyntaxis voor abonnementsregel
Een SQL-actie wordt gebruikt om metagegevens van berichten te bewerken nadat een bericht is geselecteerd met een filter van een abonnementsregel. Het is een tekstexpressie die leunt op een subset van de SQL-92-standaard. Actie-expressies worden gebruikt met het sqlExpression
element van de eigenschap 'action' van een Service Bus Rule
in een Azure Resource Manager-sjabloon, of het argument van --action-sql-expression
de Azure CLI-opdrachtaz servicebus topic subscription rule create
, en verschillende SDK-functies waarmee abonnementsregels kunnen worden beheerd.
<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>
Argumenten
<scope>
is een optionele tekenreeks die het bereik van de<property_name>
. Geldige waarden zijnsys
ofuser
.- De
sys
waarde geeft het systeembereik aan waar<property_name>
zich een van de eigenschappen van het Service Bus-bericht bevindt, zoals beschreven in berichten, nettoladingen en serialisatie. - De
user
waarde geeft het gebruikersbereik aan waar<property_name>
een sleutel is van de aangepaste eigenschappen die u voor het bericht kunt instellen bij het verzenden naar Service Bus. - Het
user
bereik is het standaardbereik als<scope>
dit niet is opgegeven.
- De
Opmerkingen
Een poging om toegang te krijgen tot een niet-bestaande systeemeigenschap is een fout, terwijl een poging om toegang te krijgen tot een niet-bestaande gebruikerseigenschap geen fout is. In plaats daarvan wordt een niet-bestaande gebruikerseigenschap intern geëvalueerd als een onbekende waarde. Een onbekende waarde wordt speciaal behandeld tijdens de evaluatie van de operator.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumenten
<regular_identifier>
is een tekenreeks die wordt vertegenwoordigd door de volgende reguliere expressie:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Dit betekent een tekenreeks die begint met een letter en wordt gevolgd door een of meer onderstrepingstekens/letters/cijfers.
[:IsLetter:]
betekent dat elk Unicode-teken dat is gecategoriseerd als een Unicode-letter. System.Char.IsLetter(c)
retourneert true
als c
het een Unicode-letter is.
[:IsDigit:]
betekent een Unicode-teken dat is gecategoriseerd als een decimaal cijfer. System.Char.IsDigit(c)
retourneert true
als c
het een Unicode-cijfer is.
Een <regular_identifier>
kan geen gereserveerd trefwoord zijn.
<delimited_identifier>
is een tekenreeks tussen vierkante haken links/rechts ([]). Een vierkante haak rechts wordt weergegeven als twee vierkante haken rechts. Hier volgen enkele voorbeelden van <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
is een tekenreeks die tussen dubbele aanhalingstekens staat. Een dubbel aanhalingsteken in id wordt weergegeven als twee dubbele aanhalingstekens. Het wordt niet aanbevolen om aanhalingstekens te gebruiken, omdat deze gemakkelijk kan worden verward met een tekenreeksconstante. Gebruik indien mogelijk een id met scheidingstekens. Hier volgt een voorbeeld van <quoted_identifier>
:
"Contoso & Northwind"
Patroon
<pattern> ::=
<expression>
Opmerkingen
<pattern>
moet een expressie zijn die wordt geëvalueerd als een tekenreeks. Het wordt gebruikt als patroon voor de LIKE-operator. Deze kan de volgende jokertekens bevatten:
%
: een tekenreeks van nul of meer tekens._
: Een willekeurig teken.
escape_char
<escape_char> ::=
<expression>
Opmerkingen
<escape_char>
moet een expressie zijn die wordt geëvalueerd als een tekenreeks met lengte 1. Het wordt gebruikt als escape-teken voor de LIKE-operator.
Komt bijvoorbeeld property LIKE 'ABC\%' ESCAPE '\'
overeen ABC%
in plaats van een tekenreeks die begint met ABC
.
Constante
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumenten
<integer_constant>
is een tekenreeks met getallen die niet tussen aanhalingstekens staan en geen decimale punten bevatten. De waarden worden als intern opgeslagenSystem.Int64
en volgen hetzelfde bereik.Hier volgen voorbeelden van lange constanten:
1894 2
<decimal_constant>
is een tekenreeks met getallen die niet tussen aanhalingstekens staan en een decimaalteken bevatten. De waarden worden opgeslagen alsSystem.Double
intern en volgen hetzelfde bereik/dezelfde precisie.In een toekomstige versie kan dit getal worden opgeslagen in een ander gegevenstype ter ondersteuning van de exacte semantiek van getallen, dus u moet niet vertrouwen op het feit dat het onderliggende gegevenstype voor
<decimal_constant>
isSystem.Double
.Hier volgen voorbeelden van decimale constanten:
1894.1204 2.0
<approximate_number_constant>
is een getal dat is geschreven in wetenschappelijke notatie. De waarden worden opgeslagen alsSystem.Double
intern en volgen hetzelfde bereik/dezelfde precisie. Hier volgen enkele voorbeelden van geschatte getalconstanten:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Opmerkingen
Booleaanse constanten worden vertegenwoordigd door de trefwoorden TRUE
of FALSE
. De waarden worden opgeslagen als System.Boolean
.
string_constant
<string_constant>
Opmerkingen
Tekenreeksconstanten worden tussen enkele aanhalingstekens geplaatst en bevatten eventuele geldige Unicode-tekens. Eén aanhalingsteken dat is ingesloten in een tekenreeksconstante, wordt weergegeven als twee enkele aanhalingstekens.
Function
<function> :=
newid() |
property(name) | p(name)
newid()
Momenteel worden de property(name)
enige functies ondersteund.
Opmerkingen
- De
newid()
functie retourneert eenSystem.Guid
gegenereerd door deSystem.Guid.NewGuid()
methode. - De
property(name)
functie retourneert de waarde van de eigenschap waarnaar wordt verwezen doorname
. Dename
waarde kan elke geldige expressie zijn die een tekenreekswaarde retourneert.
Voorbeelden
Zie Voorbeelden van Service Bus-filter voor voorbeelden.
Overwegingen
- SET wordt gebruikt om een nieuwe eigenschap te maken of de waarde van een bestaande eigenschap bij te werken.
- REMOVE wordt gebruikt om een gebruikerseigenschap te verwijderen. Alleen gebruikerseigenschappen kunnen worden verwijderd, niet systeemeigenschappen.
- SET voert indien mogelijk impliciete conversie uit wanneer het expressietype en het bestaande eigenschapstype verschillen.
- De actie mislukt als er naar niet-bestaande systeemeigenschappen wordt verwezen.
- De actie mislukt niet als naar niet-bestaande gebruikerseigenschappen wordt verwezen.
- Een niet-bestaande gebruikerseigenschap wordt intern geëvalueerd als Onbekend, volgens dezelfde semantiek als SQLRuleFilter bij het evalueren van operators.
Belangrijke punten
Hier volgen enkele belangrijke punten:
- Alleen eigenschappen van een bericht kunnen worden gewijzigd.
- Alle gebruikerseigenschappen kunnen worden gewijzigd.
- Alle openbaar updatable systeemeigenschappen kunnen ook worden gewijzigd, zoals
ReplyTo
enCorreationId
, maar we raden u aan geen systeemeigenschappen te wijzigen als onderdeel van een regelactie. Het is nog steeds toegestaan om achterwaartse compatibiliteitsredenen. - Wanneer u eigenschappen instelt, zijn alleen letterlijke numerieke waarden, Booleaanse waarden en tekenreeksen toegestaan. Een letterlijke tekenreeks wordt op zijn beurt geconverteerd naar een type op basis van de eigenschap die wordt gewijzigd. Als de eigenschap die wordt ingesteld nog niet bestaat, is er geen typeconversie van tekenreeks. Als de eigenschap die wordt gewijzigd al bestaat en de bijbehorende waarde een van deze typen
Guid
is, ,DateTimeOffset
TimeSpan
,Uri
, ,DateTime
wordt de letterlijke tekenreeks geconverteerd naar dat type en ingesteld als de eigenschapswaarde. Om specifieker te zijn, probeert de actie de letterlijke tekenreeks te converteren naar het type eigenschap. Als dit lukt, wordt de eigenschap ingesteld. Anders genereert de evaluatie van de regelactie een uitzondering en is het bericht onbesteld.