SQL-Aktionssyntax für Abonnementregeln
Eine SQL-Aktion wird zum Bearbeiten von Nachrichtenmetadaten verwendet, nachdem eine Nachricht durch einen Filter einer Abonnementregel ausgewählt wurde. Es handelt sich dabei um einen Textausdruck, der auf einer Teilmenge des SQL-92-Standards basiert. Aktionsausdrücke werden mit dem sqlExpression
-Element der action-Eigenschaft einer Service Bus-Rule
in einer Azure Resource Manager-Vorlage oder dem --action-sql-expression
-Argument eines az servicebus topic subscription rule create
-Befehls in der Azure-Befehlszeilenschnittstelle sowie mehreren SDK-Funktionen für das Verwalten von Abonnementregeln verwendet.
<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>
Argumente
<scope>
ist eine optionale Zeichenfolge, die den Bereich von<property_name>
angibt. Gültige Werte sindsys
unduser
.- Der Wert
sys
gibt den Systembereich an, wobei es sich bei<property_name>
um eine der Eigenschaften der Service Bus-Nachricht handelt, wie unter Nachrichten, Nutzlasten und Serialisierung beschrieben. - Der Wert
user
gibt den Benutzerbereich an, wobei es sich bei<property_name>
um einen Schlüssel der benutzerdefinierten Eigenschaften handelt, die Sie beim Senden der Nachricht an die Service Bus-Instanz festlegen können. - Der
user
-Bereich ist der Standardbereich, wenn<scope>
nicht angegeben wird.
- Der Wert
Hinweise
Der Versuch, auf eine nicht existierende Systemeigenschaft zuzugreifen, löst einen Fehler aus, während der Versuch, auf eine nicht existierende Benutzereigenschaft zuzugreifen, keinen Fehler auslöst. Stattdessen wird eine nicht vorhandene Benutzereigenschaft intern als unbekannter Wert ausgewertet. Ein unbekannter Wert wird während der Operatorauswertung speziell behandelt.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Argumente
<regular_identifier>
ist eine Zeichenfolge, die durch den folgenden regulären Ausdruck dargestellt wird:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Das stellt beliebige Zeichenfolgen dar, die mit einem Buchstaben beginnen, dem ein oder mehrere Unterstriche/Buchstaben/Ziffern folgen.
[:IsLetter:]
stellt beliebige Unicodezeichen dar, die als Unicodebuchstaben kategorisiert werden. System.Char.IsLetter(c)
gibt true
zurück, wenn c
ein Unicodebuchstabe ist.
[:IsDigit:]
stellt beliebige Unicodezeichen dar, die als Dezimalzahlen kategorisiert werden. System.Char.IsDigit(c)
gibt true
zurück, wenn c
eine Unicodeziffer ist.
Ein <regular_identifier>
kann kein reserviertes Schlüsselwort sein.
<delimited_identifier>
ist eine beliebige Zeichenfolge, die in den linken und rechten eckigen Klammer ([]) eingeschlossen ist. Eine rechte eckige Klammer wird als zwei rechte eckige Klammern dargestellt. Hier einige Beispiele für <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
ist eine beliebige Zeichenfolge, die in doppelte Anführungszeichen eingeschlossen ist. Ein doppeltes Anführungszeichen im Bezeichner wird als zwei doppelte Anführungszeichen dargestellt. Die Bezeichner sollten nicht in Anführungszeichen eingeschlossen werden, da sie leicht mit einer Zeichenfolgenkonstante verwechselt werden können. Verwenden Sie einen Begrenzungsbezeichner, wenn möglich. Hier ist ein Beispiel für <quoted_identifier>
:
"Contoso & Northwind"
Muster
<pattern> ::=
<expression>
Hinweise
<pattern>
muss ein Ausdruck sein, der als Zeichenfolge ausgewertet wird. Es wird als ein Muster für den LIKE-Operator verwendet. Es kann die folgenden Platzhalterzeichen enthalten:
%
: Eine Zeichenfolge aus null oder mehr Zeichen._
: Ein einzelnes Zeichen
escape_char
<escape_char> ::=
<expression>
Hinweise
<escape_char>
muss ein Ausdruck sein, der als Zeichenfolge der Länge 1 ausgewertet wird. Es wird als Escapezeichen für den LIKE-Operator verwendet.
Beispielsweise entspricht property LIKE 'ABC\%' ESCAPE '\'
eher ABC%
als einer Zeichenfolge, die mit ABC
beginnt.
Konstante
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Argumente
<integer_constant>
ist eine Zahlenzeichenfolge, die nicht in Anführungszeichen eingeschlossen ist und keine Dezimaltrennzeichen enthält. Die Werte werden intern alsSystem.Int64
gespeichert und folgen dem gleichen Bereich.Es folgen Beispiele langer Konstanten:
1894 2
<decimal_constant>
ist eine Zahlenzeichenfolge, die nicht in Anführungszeichen eingeschlossen ist und ein Dezimaltrennzeichen enthält. Die Werte werden intern alsSystem.Double
gespeichert und folgen dem gleichen Bereich/der gleichen Genauigkeit.In einer zukünftigen Version wird diese Zahl möglicherweise in einem anderen Datentyp gespeichert, zur Unterstützung der genauen Zahlensemantik, daher sollten Sie sich nicht darauf verlassen, dass der zugrunde liegende Datentyp
System.Double
für<decimal_constant>
ist.Es folgen Beispiele von Dezimalkonstanten:
1894.1204 2.0
<approximate_number_constant>
ist eine in wissenschaftlicher Notation geschriebene Zahl. Die Werte werden intern alsSystem.Double
gespeichert und folgen dem gleichen Bereich/der gleichen Genauigkeit. Es folgen Beispiele für die ungefähren Zahlenkonstanten:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Bemerkungen
Boolesche Konstanten werden durch die Schlüsselwörter TRUE
oder FALSE
dargestellt. Die Werte werden als System.Boolean
gespeichert.
string_constant
<string_constant>
Hinweise
Zeichenfolgenkonstanten werden in einfache Anführungszeichen eingeschlossen und enthalten beliebige, gültige Unicodezeichen. Ein einfaches Anführungszeichen, das in eine Zeichenfolgenkonstante eingebettet ist, wird als zwei einfache Anführungszeichen dargestellt.
Funktion
<function> :=
newid() |
property(name) | p(name)
Derzeit werden nur die Funktionen newid()
und property(name)
unterstützt.
Hinweise
- Die
newid()
-Funktion gibt einSystem.Guid
zurück, das von derSystem.Guid.NewGuid()
-Methode generiert wird. - Die Funktion
property(name)
gibt den Wert der Eigenschaft zurück, auf die vonname
verwiesen wird. Der Wertname
kann ein beliebiger, gültiger Ausdruck sein, der einen Zeichenfolgenwert zurückgibt.
Beispiele
Beispiele finden Sie unter Festlegen von Abonnementfiltern (Azure Service Bus).
Überlegungen
- SET wird zum Erstellen einer neuen Eigenschaft oder zum Aktualisieren des Werts einer vorhandenen Eigenschaft verwendet.
- REMOVE wird verwendet, um eine Benutzereigenschaft zu entfernen. Nur Benutzereigenschaften können entfernt werden, Systemeigenschaften nicht.
- SET führt, wenn möglich, eine implizite Konvertierung durch, wenn der Ausdruckstyp und der vorhandene Eigenschaftentyp unterschiedlich sind.
- Die Aktion löst einen Fehler aus, wenn auf nicht vorhandene Systemeigenschaften verwiesen wurde.
- Die Aktion schlägt nicht fehl, wenn auf nicht vorhandene Benutzereigenschaften verwiesen wurde.
- Eine nicht existierende Benutzereigenschaft wird intern als „Unbekannt“ ausgewertet und folgt der gleichen Semantik wie SQLRuleFilter beim Auswerten der Operatoren.
Wichtige Punkte
Folgende wichtige Punkte sind zu beachten:
- Es können nur Eigenschaften für eine Nachricht geändert werden.
- Alle Benutzereigenschaften können geändert werden.
- Alle öffentlich aktualisierbaren Systemeigenschaften können auch geändert werden, z. B.
ReplyTo
undCorrelationId
. Es wird jedoch empfohlen, die Systemeigenschaften nicht als Teil einer Regelaktion zu ändern. Aus Gründen der Abwärtskompatibilität ist es weiterhin zulässig. - Beim Festlegen von Eigenschaften sind nur numerische, boolesche und Zeichenfolgenliterale zulässig. Ein Zeichenfolgenliteral wiederum wird basierend auf der geänderten Eigenschaft in einen Typ konvertiert. Wenn die festgelegte Eigenschaft noch nicht vorhanden ist, gibt es keine Typkonvertierung aus der Zeichenfolge. Wenn die geänderte Eigenschaft bereits vorhanden ist und der Wert einer dieser Typen
Guid
,DateTimeOffset
,TimeSpan
,Uri
,DateTime
ist, wird das Zeichenfolgenliteral in diesen Typ konvertiert und als Eigenschaftswert festgelegt. Genauer gesagt versucht die Aktion, das Zeichenfolgenliteral in den Eigenschaftstyp zu konvertieren. Wenn dies erfolgreich ist, wird die Eigenschaft festgelegt. Andernfalls löst die Auswertung der Regelaktion eine Ausnahme aus, und die Nachricht ist unzustellbar.