Składnia akcji SQL reguły subskrypcji
Akcja SQL służy do manipulowania metadanymi komunikatów po wybraniu komunikatu przez filtr reguły subskrypcji. Jest to wyrażenie tekstowe, które opiera się na podzestawie standardu SQL-92. Wyrażenia akcji są używane z sqlExpression
elementem właściwości "action" usługi Service Bus Rule
w szablonie usługi Azure Resource Manager lub argumentem polecenia interfejsu wiersza polecenia az servicebus topic subscription rule create
--action-sql-expression
platformy Azure oraz kilkoma funkcjami zestawu SDK, które umożliwiają zarządzanie regułami subskrypcji.
<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>
to opcjonalny ciąg wskazujący zakres elementu<property_name>
. Prawidłowe wartości tosys
iuser
.- Wartość
sys
wskazuje zakres systemowy, w którym<property_name>
znajduje się dowolny z właściwości komunikatu usługi Service Bus, zgodnie z opisem w temacie Komunikaty, ładunki i serializacji. - Wartość
user
wskazuje zakres użytkownika, gdzie<property_name>
jest kluczem właściwości niestandardowych, które można ustawić w komunikacie podczas wysyłania do usługi Service Bus. - Zakres
user
jest domyślnym zakresem, jeśli<scope>
nie zostanie określony.
- Wartość
Uwagi
Próba uzyskania dostępu do nieistniejących właściwości systemowych jest błędem, podczas gdy próba uzyskania dostępu do nieistniejących właściwości użytkownika nie jest błędem. Zamiast tego właściwość nieistniejących użytkowników jest wewnętrznie oceniana jako nieznana wartość. Nieznana wartość jest traktowana specjalnie podczas oceny operatora.
Property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumenty
<regular_identifier>
jest ciągiem reprezentowanym przez następujące wyrażenie regularne:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Oznacza to, że każdy ciąg rozpoczynający się literą i następuje po nim co najmniej jeden znak podkreślenia/litera/cyfra.
[:IsLetter:]
oznacza każdy znak Unicode sklasyfikowany jako litera Unicode. System.Char.IsLetter(c)
zwraca true
wartość , jeśli c
jest literą Unicode.
[:IsDigit:]
oznacza każdy znak Unicode sklasyfikowany jako cyfra dziesiętna. System.Char.IsDigit(c)
zwraca true
wartość , jeśli c
jest cyfrą Unicode.
Nie <regular_identifier>
można być zastrzeżonym słowem kluczowym.
<delimited_identifier>
to dowolny ciąg, który jest ujęta w nawiasy kwadratowe ([]). Prawy nawias kwadratowy jest reprezentowany jako dwa prawe nawiasy kwadratowe. Poniżej przedstawiono przykłady:<delimited_identifier>
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
to dowolny ciąg, który jest ujęta w znaki podwójnego cudzysłowu. Podwójny cudzysłów w identyfikatorze jest reprezentowany jako dwa podwójne cudzysłów. Nie zaleca się używania identyfikatorów cytowanych, ponieważ można go łatwo mylić ze stałą ciągu. Jeśli to możliwe, użyj identyfikatora rozdzielanego. Oto przykład:<quoted_identifier>
"Contoso & Northwind"
Wzorzec
<pattern> ::=
<expression>
Uwagi
<pattern>
musi być wyrażeniem, które jest oceniane jako ciąg. Jest on używany jako wzorzec dla operatora LIKE. Może zawierać następujące symbole wieloznaczne:
%
: dowolny ciąg zero lub więcej znaków._
: dowolny pojedynczy znak.
escape_char
<escape_char> ::=
<expression>
Uwagi
<escape_char>
musi być wyrażeniem, które jest oceniane jako ciąg o długości 1. Jest on używany jako znak ucieczki dla operatora LIKE.
Na przykład pasujeABC%
, property LIKE 'ABC\%' ESCAPE '\'
a nie ciąg rozpoczynający się od ABC
.
Stała
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumenty
<integer_constant>
jest ciągiem liczb, które nie są ujęte w cudzysłów i nie zawierają punktów dziesiętnych. Wartości są przechowywaneSystem.Int64
wewnętrznie i są zgodne z tym samym zakresem.Poniżej przedstawiono przykłady długich stałych:
1894 2
<decimal_constant>
jest ciągiem liczb, które nie są ujęte w cudzysłów i zawierają punkt dziesiętny. Wartości są przechowywaneSystem.Double
wewnętrznie i są zgodne z tym samym zakresem/dokładnością.W przyszłej wersji ten numer może być przechowywany w innym typie danych, aby obsługiwać dokładną semantykę liczb, więc nie należy polegać na tym, że bazowy typ danych jest
System.Double
przeznaczony dla elementu<decimal_constant>
.Poniżej przedstawiono przykłady stałych dziesiętnych:
1894.1204 2.0
<approximate_number_constant>
jest liczbą napisaną w notacji naukowej. Wartości są przechowywaneSystem.Double
wewnętrznie i są zgodne z tym samym zakresem/dokładnością. Poniżej przedstawiono przykłady przybliżonych stałych liczbowych:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Uwagi
Stałe logiczne są reprezentowane przez słowa kluczowe TRUE
lub FALSE
. Wartości są przechowywane jako System.Boolean
.
string_constant
<string_constant>
Uwagi
Stałe ciągów są ujęte w znaki pojedynczego cudzysłowu i zawierają wszystkie prawidłowe znaki Unicode. Pojedynczy cudzysłów osadzony w stałej ciągu jest reprezentowany jako dwa pojedyncze cudzysłów.
Function
<function> :=
newid() |
property(name) | p(name)
newid()
Obecnie i property(name)
są jedynymi obsługiwanymi funkcjami.
Uwagi
- Funkcja
newid()
zwraca wartość wygenerowanąSystem.Guid
przez metodęSystem.Guid.NewGuid()
. - Funkcja
property(name)
zwraca wartość właściwości, do którychname
odwołuje się element . Wartośćname
może być dowolnym prawidłowym wyrażeniem, które zwraca wartość ciągu.
Przykłady
Przykłady można znaleźć w temacie Przykłady filtrów usługi Service Bus.
Kwestie wymagające rozważenia
- Zestaw służy do tworzenia nowej właściwości lub aktualizowania wartości istniejącej właściwości.
- Funkcja REMOVE służy do usuwania właściwości użytkownika. Można usunąć tylko właściwości użytkownika, a nie właściwości systemu.
- Zestaw wykonuje niejawną konwersję, jeśli jest to możliwe, gdy typ wyrażenia i istniejący typ właściwości są inne.
- Akcja kończy się niepowodzeniem, jeśli odwołano się do nieistniejących właściwości systemu.
- Akcja nie kończy się niepowodzeniem, jeśli odwoływały się do nieistniejących właściwości użytkownika.
- Nieistniejąca właściwość użytkownika jest oceniana wewnętrznie jako "Nieznana", postępując zgodnie z tą samą semantyczną co sqlRuleFilter podczas oceniania operatorów.
Ważne punkty
Oto kilka ważnych kwestii:
- Można modyfikować tylko właściwości komunikatu.
- Wszystkie właściwości użytkownika można modyfikować.
- Wszystkie właściwości systemu, które można aktualizować publicznie, można również modyfikować, na przykład
ReplyTo
iCorreationId
, ale zalecamy, aby nie zmieniać właściwości systemu w ramach akcji reguły. Jest to nadal dozwolone ze względów zgodności z poprzednimi wersjami. - Podczas ustawiania właściwości dozwolone są tylko literały liczbowe, logiczne i ciągowe. Literał ciągu jest z kolei konwertowany na typ na podstawie modyfikowanej właściwości. Jeśli ustawiona właściwość jeszcze nie istnieje, nie ma konwersji typu z ciągu. Jeśli zmodyfikowana właściwość już istnieje, a jej wartość jest jednym z tych typów
Guid
,Uri
DateTimeOffset
TimeSpan
DateTime
literał ciągu jest konwertowany na ten typ i ustawiany jako wartość właściwości. Aby być bardziej szczegółowe, akcja próbuje przekonwertować literał ciągu na typ właściwości. Jeśli to się powiedzie, właściwość zostanie ustawiona. W przeciwnym razie ocena akcji reguły zgłasza wyjątek i komunikat jest utracony.