Sdílet prostřednictvím


Syntaxe akce SQL pravidla předplatného

Akce SQL slouží k manipulaci s metadaty zpráv po výběru zprávy filtrem pravidla odběru. Jedná se o textový výraz, který se spoléhá na podmnožinu standardu SQL-92. Výrazy akcí se používají s prvkem sqlExpression vlastnosti action služby Service Bus Rule v šabloně Azure Resource Manageru nebo s argumentem příkazu --action-sql-expression Azure CLI az servicebus topic subscription rule create a několika funkcemi sady SDK, které umožňují správu pravidel předplatného.

<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> je volitelný řetězec označující obor <property_name>. Platné hodnoty jsou sys nebo user.
    • Hodnota sys označuje systémový obor, kde <property_name> je libovolná z vlastností ve zprávě služby Service Bus, jak je popsáno v části Zprávy, datové části a serializace.
    • Hodnota user označuje obor uživatele, kde <property_name> je klíč vlastních vlastností, které můžete nastavit ve zprávě při odesílání do služby Service Bus.
    • Obor user je výchozí obor, pokud <scope> není zadaný.

Poznámky

Pokus o přístup k neexistující systémové vlastnosti je chyba, zatímco pokus o přístup k neexistující vlastnosti uživatele není chybou. Místo toho je neexistující vlastnost uživatele interně vyhodnocena jako neznámá hodnota. Neznámá hodnota je zpracována speciálně během vyhodnocení operátoru.

property_name

<property_name> ::=  
     <identifier>  
     | <delimited_identifier>  
  
<identifier> ::=  
     <regular_identifier> | <quoted_identifier> | <delimited_identifier>  
  

Argumenty

<regular_identifier> je řetězec reprezentovaný následujícím regulárním výrazem:

[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*  

Znamená to, že jakýkoli řetězec, který začíná písmenem, a za ním následuje jedno nebo více podtržítko/písmeno/číslice.

[:IsLetter:] znamená jakýkoli znak Unicode, který je zařazen do kategorií jako písmeno Unicode. System.Char.IsLetter(c) vrátí true , pokud c je písmeno Unicode.

[:IsDigit:] znamená jakýkoli znak Unicode, který je zařazený do kategorií jako desetinná číslice. System.Char.IsDigit(c) vrátí true , pokud c je číslice Unicode.

Nelze <regular_identifier> použít vyhrazené klíčové slovo.

<delimited_identifier> je libovolný řetězec uzavřený s hranatými závorkami zleva/doprava ([]). Pravá hranatá závorka je reprezentována jako dvě pravé hranaté závorky. Tady jsou příklady <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> je libovolný řetězec uzavřený s dvojitými uvozovkami. Dvojitá uvozovka v identifikátoru je reprezentována jako dvě dvojité uvozovky. Nedoporučuje se používat uvozované identifikátory, protože se dají snadno zaměňovat s řetězcovou konstantou. Pokud je to možné, použijte identifikátor s oddělovači. Tady je příklad <quoted_identifier>:

"Contoso & Northwind"  

Vzor

<pattern> ::=  
      <expression>  

Poznámky

<pattern> musí být výraz, který se vyhodnotí jako řetězec. Používá se jako vzor pro operátor LIKE. Může obsahovat následující zástupné znaky:

  • %: Libovolný řetězec s nulovými nebo více znaky.
  • _: Libovolný jeden znak.

escape_char

<escape_char> ::=  
      <expression>  

Poznámky

<escape_char> musí být výraz, který se vyhodnotí jako řetězec délky 1. Slouží jako řídicí znak pro operátor LIKE.

Například property LIKE 'ABC\%' ESCAPE '\' odpovídá ABC% namísto řetězce, který začíná řetězcem ABC.

Konstanta

<constant> ::=  
      <integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL  

Argumenty

  • <integer_constant> je řetězec čísel, která nejsou uzavřena v uvozovkách a neobsahují desetinné čárky. Hodnoty se ukládají interně System.Int64 a dodržují stejný rozsah.

    Tady jsou příklady dlouhých konstant:

    1894  
    2  
    
  • <decimal_constant> je řetězec čísel, která nejsou uzavřena v uvozovkách a obsahují desetinnou čárku. Hodnoty se ukládají interně System.Double a odpovídají stejnému rozsahu a přesnosti.

    V budoucí verzi může být toto číslo uloženo v jiném datovém typu, aby podporovalo přesnou sémantiku čísel, takže byste neměli spoléhat na skutečnost, že podkladový datový typ je System.Double určený <decimal_constant>.

    Tady jsou příklady desetinných konstant:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> je číslo napsané ve vědeckém zápisu. Hodnoty se ukládají interně System.Double a odpovídají stejnému rozsahu a přesnosti. Tady jsou příklady přibližných číselných konstant:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Poznámky

Logické konstanty jsou reprezentovány klíčovými slovy TRUE nebo FALSE. Hodnoty jsou uloženy jako System.Boolean.

string_constant

<string_constant>  

Poznámky

Řetězcové konstanty jsou uzavřeny v jednoduchých uvozovkách a obsahují všechny platné znaky Unicode. Jednoduchá uvozovka vložená do řetězcové konstanty je reprezentována jako dvě jednoduché uvozovky.

Function

<function> :=  
      newid() |  
      property(name) | p(name)  

newid() property(name) V současné době jsou jediné podporované funkce.

Poznámky

  • Funkce newid() vrátí vygenerovanou System.Guid metodou System.Guid.NewGuid() .
  • Funkce property(name) vrátí hodnotu vlastnosti, na kterou nameodkazuje . Hodnota name může být libovolný platný výraz, který vrací řetězcovou hodnotu.

Příklady

Příklady najdete v příkladech filtru služby Service Bus.

Důležité informace

  • SET slouží k vytvoření nové vlastnosti nebo aktualizaci hodnoty existující vlastnosti.
  • Funkce REMOVE slouží k odebrání vlastnosti uživatele. Odebrat lze pouze vlastnosti uživatele, nikoli systémové vlastnosti.
  • FUNKCE SET provádí implicitní převod, pokud je to možné, pokud je typ výrazu a existující typ vlastnosti odlišné.
  • Akce selže, pokud byly odkazovány neexistující systémové vlastnosti.
  • Akce se nezdaří, pokud byly odkazovány neexistující vlastnosti uživatele.
  • Neexistující vlastnost uživatele se vyhodnocuje interně jako neznámá, protože při vyhodnocování operátorů následuje stejná sémantika jako SQLRuleFilter .

Důležité body

Tady je několik důležitých bodů:

  • Lze upravit pouze vlastnosti zprávy.
  • Lze upravit všechny vlastnosti uživatele.
  • Všechny veřejně aktualizovatelné systémové vlastnosti lze také upravit, například ReplyTo a CorrelationId, ale doporučujeme neměnit systémové vlastnosti jako součást akce pravidla. Je stále povolený z důvodu zpětné kompatibility.
  • Při nastavování vlastností jsou povoleny pouze číselné, logické a řetězcové literály. Řetězcový literál je převeden na typ založený na změně vlastnosti. Pokud sada vlastností ještě neexistuje, neexistuje žádný převod typu z řetězce. Pokud vlastnost, kterou upravujete, již existuje a její hodnota je jedním z těchto typů Guid, UriDateTimeOffsetTimeSpanDateTime, pak řetězcový literál je převeden na tento typ a nastaven jako hodnota vlastnosti. Chcete-li být konkrétnější, akce se pokusí převést řetězcový literál na typ vlastnosti. Pokud je tato vlastnost úspěšná, nastaví se tato vlastnost. Jinak vyhodnocení akce pravidla vyvolá výjimku a zpráva je nedoručené.

Další kroky