Syntaxe filtru SQL pravidla předplatného

Filtr SQL je jedním z dostupných typů filtrů pro odběry témat služby Service Bus. Jedná se o textový výraz, který se spoléhá na podmnožinu standardu SQL-92. Výrazy filtru se používají s prvkem sqlExpression vlastnosti sqlFilter služby Service Bus Rule v šabloně Azure Resource Manageru nebo s argumentem příkazu --filter-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. Povolené výrazy se zobrazují v této části.

Service Bus Premium podporuje také syntaxi selektoru zpráv JMS SQL prostřednictvím rozhraní API JMS 2.0.

<predicate ::=  
      { NOT <predicate> }  
      | <predicate> AND <predicate>  
      | <predicate> OR <predicate>  
      | <expression> { = | <> | != | > | >= | < | <= } <expression>  
      | <property> IS [NOT] NULL  
      | <expression> [NOT] IN ( <expression> [, ...n] )  
      | <expression> [NOT] LIKE <pattern> [ESCAPE <escape_char>]  
      | EXISTS ( <property> )  
      | ( <predicate> )  
  
<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:]]*  

Tato gramatika znamená 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 PRAVDA nebo NEPRAVDA. 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)  

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.

Důležité informace

Zvažte následující sémantiku filtru SQL:

  • Názvy vlastností nerozlišují malá a velká písmena.

  • Operátory následují implicitní sémantiku převodu jazyka C#, kdykoli je to možné.

  • Systémové vlastnosti jsou některé vlastnosti zprávy služby Service Bus, jak je popsáno v části Zprávy, datové části a serializace.

    Zvažte následující IS [NOT] NULL sémantiku:

    • property IS NULL vyhodnotí se, jako true by vlastnost neexistuje nebo hodnota vlastnosti je null.

Sémantika vyhodnocení vlastností

  • Pokus o vyhodnocení neexistující systémové vlastnosti vyvolá FilterException výjimku.

  • Vlastnost, která neexistuje, se interně vyhodnotí jako neznámá.

    Neznámé vyhodnocení v aritmetických operátorech:

  • Pokud se u binárních operátorů vyhodnotí levá nebo pravá strana operandů jako neznámá, pak je výsledek neznámý.

  • Pro unární operátory, pokud je operand vyhodnocen jako neznámý, je výsledek neznámý.

    Neznámé vyhodnocení v binárních relačních operátorech:

  • Pokud je levá nebo pravá strana operandů vyhodnocena jako neznámá, výsledek je neznámý.

    Neznámé vyhodnocení v [NOT] LIKE:

  • Pokud je některý operand vyhodnocen jako neznámý, je výsledek neznámý.

    Neznámé vyhodnocení v [NOT] IN:

  • Pokud je levý operand vyhodnocen jako neznámý, je výsledek neznámý.

    Neznámé vyhodnocení v operátoru AND :

+---+---+---+---+  
|AND| T | F | U |  
+---+---+---+---+  
| T | T | F | U |  
+---+---+---+---+  
| F | F | F | F |  
+---+---+---+---+  
| U | U | F | U |  
+---+---+---+---+  

Neznámé vyhodnocení v operátoru OR :

+---+---+---+---+  
|OR | T | F | U |  
+---+---+---+---+  
| T | T | T | T |  
+---+---+---+---+  
| F | T | F | U |  
+---+---+---+---+  
| U | T | U | U |  
+---+---+---+---+  

Sémantika vazby operátoru

  • Relační operátory, například >, , >=<, <=!=a = následují stejnou sémantiku jako vazba operátoru jazyka C# v povýšení datového typu a implicitní převody.

  • Aritmetické operátory, například +, -, */a % následují stejnou sémantiku jako vazba operátoru jazyka C# v povýšení datového typu a implicitní převody.

Příklady

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

Další kroky