Abonelik Kuralı SQL Filtresi Söz Dizimi
SQL filtresi, Service Bus konu abonelikleri için kullanılabilen filtre türlerinden biridir. BU, SQL-92 standardının bir alt kümesini kullanan bir metin ifadesidir. Filtre ifadeleri, Bir Azure Resource Manager şablonundaki Service Bus'ın Rule
'sqlFilter' özelliğinin öğesiyle veya Azure CLI az servicebus topic subscription rule create
komutunun --filter-sql-expression
bağımsız değişkeniyle ve abonelik kurallarının yönetilmesine izin veren çeşitli SDK işlevleriyle sqlExpression
kullanılır. İzin verilen ifadeler bu bölümde gösterilir.
Service Bus Premium, JMS 2.0 API aracılığıyla JMS SQL ileti seçici söz dizimini de destekler.
<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>
Bağımsız değişkenler
<scope>
, kapsamını gösteren isteğe bağlı bir dizedir<property_name>
. Geçerli değerlersys
veyauser
şeklindedir.sys
değeri, Service Bus iletisindeki özelliklerden herhangi birinin İletiler, yükler ve serileştirme bölümünde açıklandığı gibi sistem<property_name>
kapsamını gösterir.user
değeri, Service Bus'a gönderirken iletide ayarlayabileceğiniz özel özelliklerin anahtarı olan kullanıcı kapsamını<property_name>
gösterir.- Kapsam
user
belirtilmezse<scope>
varsayılan kapsamdır.
Açıklamalar
Var olmayan bir sistem özelliğine erişme girişimi bir hatadır, ancak var olmayan bir kullanıcı özelliğine erişme girişimi hata değildir. Bunun yerine, var olmayan bir kullanıcı özelliği dahili olarak bilinmeyen bir değer olarak değerlendirilir. Bilinmeyen bir değer, işleç değerlendirmesi sırasında özel olarak değerlendirilir.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Bağımsız değişkenler
<regular_identifier>
, aşağıdaki normal ifadeyle temsil edilen bir dizedir:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Bu dil bilgisi, bir harfle başlayan ve ardından bir veya daha fazla alt çizgi/harf/basamak gelen herhangi bir dize anlamına gelir.
[:IsLetter:]
, Unicode harfi olarak kategorilere ayrılmış herhangi bir Unicode karakteri anlamına gelir. System.Char.IsLetter(c)
, Unicode harfiyse c
döndürürtrue
.
[:IsDigit:]
, ondalık basamak olarak kategorilere ayrılmış herhangi bir Unicode karakteri anlamına gelir. System.Char.IsDigit(c)
, Unicode basamaksa c
döndürürtrue
.
Ayrılmış <regular_identifier>
anahtar sözcük olamaz.
<delimited_identifier>
, sol/sağ köşeli ayraç ([]) içine alınmış herhangi bir dizedir. Sağ köşeli ayraç iki sağ köşeli ayraç olarak gösterilir. Aşağıda örnekleri verilmiştir <delimited_identifier>
:
[Property With Space]
[HR-EmployeeID]
<quoted_identifier>
çift tırnak içine alınmış herhangi bir dizedir. Tanımlayıcıdaki çift tırnak işareti iki çift tırnak işareti olarak gösterilir. Bir dize sabitiyle kolayca karıştırılabildiği için tırnak içine alınmış tanımlayıcıların kullanılması önerilmez. Mümkünse sınırlandırılmış bir tanımlayıcı kullanın. Aşağıda bir örnek verilmişti <quoted_identifier>
:
"Contoso & Northwind"
desen
<pattern> ::=
<expression>
Açıklamalar
<pattern>
dize olarak değerlendirilen bir ifade olmalıdır. LIKE işleci için desen olarak kullanılır. Aşağıdaki joker karakterleri içerebilir:
%
: Sıfır veya daha fazla karakterden oluşan herhangi bir dize._
: Herhangi bir tek karakter.
escape_char
<escape_char> ::=
<expression>
Açıklamalar
<escape_char>
1 uzunluğunda bir dize olarak değerlendirilen bir ifade olmalıdır. LIKE işleci için kaçış karakteri olarak kullanılır.
Örneğin, property LIKE 'ABC\%' ESCAPE '\'
ile ABC
başlayan bir dize yerine eşleşirABC%
.
sabiti
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Bağımsız değişkenler
<integer_constant>
, tırnak içine alınmamış ve ondalık ayırıcı içermeyen bir sayı dizesidir. Değerler dahili olarakSystem.Int64
depolanır ve aynı aralığı izler.Burada uzun sabit örnekleri verilmiştir:
1894 2
<decimal_constant>
, tırnak içine alınmamış ve ondalık ayırıcı içeren bir sayı dizesidir. Değerler dahili olarakSystem.Double
depolanır ve aynı aralığı/duyarlığı izler.Sonraki bir sürümde, bu sayı tam sayı semantiğini desteklemek için farklı bir veri türünde depolanabilir, bu nedenle temel alınan veri türünün için
<decimal_constant>
olduğuSystem.Double
gerçeğine güvenmemelisiniz.Aşağıda ondalık sabit örnekleri verilmiştir:
1894.1204 2.0
<approximate_number_constant>
bilimsel olarak yazılmış bir sayıdır. Değerler dahili olarakSystem.Double
depolanır ve aynı aralığı/duyarlığı izler. Aşağıda, yaklaşık sayı sabitlerinin örnekleri verilmiştir:101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Açıklamalar
Boole sabitleri TRUE veya FALSE anahtar sözcükleriyle temsil edilir. Değerler olarak System.Boolean
depolanır.
string_constant
<string_constant>
Açıklamalar
Dize sabitleri tek tırnak içine alınır ve geçerli Unicode karakterleri içerir. Dize sabitinde katıştırılmış tek tırnak işareti, iki tek tırnak işareti olarak temsil edilir.
function
<function> :=
newid() |
property(name) | p(name)
Açıklamalar
newid()
işlevi, yöntemi tarafından System.Guid.NewGuid()
oluşturulan bir System.Guid
döndürür.
işlevi tarafından property(name)
name
başvuruda bulunan özelliğin değerini döndürür. Değer, name
dize değeri döndüren herhangi bir geçerli ifade olabilir.
Dikkat edilmesi gerekenler
Aşağıdaki Sql Filtresi semantiğini göz önünde bulundurun:
Özellik adları büyük/küçük harfe duyarlı değildir.
İşleçler mümkün olduğunda C# örtük dönüştürme semantiğini izler.
Sistem özellikleri, Service Bus iletisindeki İletiler, yükler ve serileştirme bölümünde açıklandığı gibi özelliklerden herhangi biridir.
Aşağıdaki
IS [NOT] NULL
semantiği göz önünde bulundurun:property IS NULL
, özelliğin mevcut olmaması veya özelliğin değerinull
olaraktrue
değerlendirilir.
Özellik değerlendirme semantiği
Var olmayan bir sistem özelliğini değerlendirme girişimi bir
FilterException
özel durum oluşturur.Var olmayan bir özellik, şirket içinde bilinmeyen olarak değerlendirilir.
Aritmetik işleçlerde bilinmeyen değerlendirme:
İkili işleçler için işlenenlerin sol veya sağ tarafı bilinmiyor olarak değerlendirilirse sonuç bilinmez.
Birli işleçler için işlenen bilinmiyor olarak değerlendirilirse sonuç bilinmez.
İkili karşılaştırma işleçlerinde bilinmeyen değerlendirme:
İşlenenlerin sol veya sağ tarafı bilinmiyor olarak değerlendirilirse sonuç bilinmez.
içinde
[NOT] LIKE
bilinmeyen değerlendirme:Herhangi bir işlenen bilinmiyor olarak değerlendirilirse, sonuç bilinmez.
içinde
[NOT] IN
bilinmeyen değerlendirme:Sol işlenen bilinmiyor olarak değerlendirilirse sonuç bilinmez.
AND işlecinde bilinmeyen değerlendirme:
+---+---+---+---+
|AND| T | F | U |
+---+---+---+---+
| T | T | F | U |
+---+---+---+---+
| F | F | F | F |
+---+---+---+---+
| U | U | F | U |
+---+---+---+---+
OR işlecinde bilinmeyen değerlendirme:
+---+---+---+---+
|OR | T | F | U |
+---+---+---+---+
| T | T | T | T |
+---+---+---+---+
| F | T | F | U |
+---+---+---+---+
| U | T | U | U |
+---+---+---+---+
İşleç bağlama semantiği
, ,
>=
,<
,<=
!=
ve gibi>
karşılaştırma işleçleri, veri türü yükseltmelerinde ve=
örtük dönüştürmelerde C# işleci bağlaması ile aynı semantiği izler., ,
-
,*
/
ve gibi+
aritmetik işleçler, veri türü yükseltmelerinde ve%
örtük dönüştürmelerde C# işleci bağlaması ile aynı semantiği izler.
Örnekler
Örnekler için bkz . Service Bus filtre örnekleri.