Share via


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ğerler sys veya user ş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 ABCbaş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 olarak System.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 olarak System.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ğu System.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 olarak System.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.Booleandepolanı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)namebaş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ğeri nullolarak true 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] LIKEbilinmeyen değerlendirme:

  • Herhangi bir işlenen bilinmiyor olarak değerlendirilirse, sonuç bilinmez.

    içinde [NOT] INbilinmeyen 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.

Sonraki adımlar