Udostępnij za pośrednictwem


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 to sys i user.
    • 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.

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ą przechowywane System.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ą przechowywane System.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ą przechowywane System.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órych nameodwoł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 i CorreationId, 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ówGuid, UriDateTimeOffsetTimeSpanDateTimeliterał 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.

Następne kroki