Udostępnij za pośrednictwem


Składnia filtru SQL reguły subskrypcji

Filtr SQL jest jednym z dostępnych typów filtrów dla subskrypcji tematów usługi Service Bus. Jest to wyrażenie tekstowe, które opiera się na podzestawie standardu SQL-92. Wyrażenia filtru są używane z sqlExpression elementem właściwości "sqlFilter" usługi Service Bus Rule w szablonie usługi Azure Resource Manager lub argumentem polecenia interfejsu wiersza polecenia az servicebus topic subscription rule create--filter-sql-expression platformy Azure oraz kilkoma funkcjami zestawu SDK, które umożliwiają zarządzanie regułami subskrypcji. Dozwolone wyrażenia są wyświetlane w tej sekcji.

Usługa Service Bus Premium obsługuje również składnię selektora komunikatów SQL JMS za pośrednictwem interfejsu 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> 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:]]*  

Ta gramatyka oznacza 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"  

pattern

<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.

    Oto 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)  

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.

Kwestie wymagające rozważenia

Rozważmy następującą semantyka filtru SQL:

  • Nazwy właściwości są niewrażliwe na wielkość liter.

  • Operatory stosują semantyka niejawnej konwersji w języku C#, gdy jest to możliwe.

  • Właściwości systemu są dowolnymi właściwościami komunikatu usługi Service Bus zgodnie z opisem w temacie Komunikaty, ładunki i serializacja.

    Rozważmy następującą IS [NOT] NULL semantyka:

    • property IS NULL wartość jest obliczana tak, jakby true właściwość nie istnieje lub wartość właściwości to null.

Semantyka oceny właściwości

  • Próba oceny nieistniejących właściwości systemowych zgłasza FilterException wyjątek.

  • Właściwość, która nie istnieje, jest wewnętrznie oceniana jako nieznana.

    Nieznana ocena w operatorach arytmetycznych:

  • W przypadku operatorów binarnych, jeśli lewa lub prawa strona operandów jest oceniana jako nieznana, wynik jest nieznany.

  • W przypadku operatorów jednoargumentowych, jeśli operand jest oceniany jako nieznany, wynik jest nieznany.

    Nieznana ocena w operatorach porównania binarnego:

  • Jeśli lewa lub prawa strona operandów jest oceniana jako nieznana, wynik jest nieznany.

    Nieznana ocena w pliku [NOT] LIKE:

  • Jeśli jakikolwiek operand jest oceniany jako nieznany, wynik jest nieznany.

    Nieznana ocena w pliku [NOT] IN:

  • Jeśli lewy operand jest oceniany jako nieznany, wynik jest nieznany.

    Nieznana ocena w operatorze AND :

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

Nieznana ocena w operatorze OR :

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

Semantyka powiązań operatorów

  • Operatory porównania, takie jak >, , >=<, <=, !=i = są zgodne z tymi samymi semantykami co powiązanie operatora języka C# w promocjach typów danych i niejawnych konwersji.

  • Operatory arytmetyczne, takie jak +, -, *, /i % są zgodne z tymi samymi semantykami co powiązanie operatora języka C# w promocjach typów danych i niejawnych konwersjach.

Przykłady

Przykłady można znaleźć w temacie Przykłady filtrów usługi Service Bus.

Następne kroki