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 tosys
iuser
.- 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.
- Wartość
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ą przechowywaneSystem.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ą przechowywaneSystem.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ą przechowywaneSystem.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 name
odwoł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, jakbytrue
właściwość nie istnieje lub wartość właściwości tonull
.
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.