Abonelik Kuralı SQL Eylemi Söz Dizimi

Sql eylemi , bir abonelik kuralı filtresi tarafından bir ileti seçildikten sonra ileti meta verilerini işlemek için kullanılır. BU, SQL-92 standardının bir alt kümesini kullanan bir metin ifadesidir. Eylem ifadeleri, Bir Azure Resource Manager şablonundaki Service Bus'ın Rule 'action' özelliğinin öğesiyle veya Azure CLI az servicebus topic subscription rule create komutunun --action-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.

<statements> ::=
    <statement> [, ...n]  
  
<statement> ::=
    <action> [;]
    Remarks
    -------
    Semicolon is optional.  
  
<action> ::=
    SET <property> = <expression>
    REMOVE <property>  
<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:]]*  

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

Sabit

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

    Aşağıda 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 veya FALSEanahtar sözcükleriyle TRUE 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)  

newid() Şu anda ve property(name) desteklenen tek işlevlerdir.

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.

Örnekler

Örnekler için bkz . Service Bus filtre örnekleri.

Dikkat edilmesi gereken noktalar

  • SET, yeni bir özellik oluşturmak veya mevcut bir özelliğin değerini güncelleştirmek için kullanılır.
  • REMOVE, bir kullanıcı özelliğini kaldırmak için kullanılır. Sistem özellikleri değil, yalnızca kullanıcı özellikleri kaldırılabilir.
  • SET, ifade türü ve mevcut özellik türü farklı olduğunda mümkünse örtük dönüştürme gerçekleştirir.
  • Var olmayan sistem özelliklerine başvurulduysa eylem başarısız olur.
  • Var olmayan kullanıcı özelliklerine başvurulduysa eylem başarısız olmaz.
  • Var olmayan bir kullanıcı özelliği, işleçler değerlendirilirken SQLRuleFilter ile aynı semantiği izleyerek dahili olarak "Bilinmiyor" olarak değerlendirilir.

Önemli noktalar

İşte birkaç önemli nokta:

  • Yalnızca iletideki özellikler değiştirilebilir.
  • Tüm kullanıcı özellikleri değiştirilebilir.
  • Genel olarak güncelleştirilebilir tüm sistem özellikleri ve CorreationIdgibi ReplyTo değiştirilebilir, ancak bir kural eyleminin parçası olarak sistem özelliklerini değiştirmenizi öneririz. Geriye dönük uyumluluk nedeniyle hala izin verilir.
  • Özellikleri ayarlarken yalnızca sayısal, Boole ve dize değişmez değerlerine izin verilir. Sırayla dize değişmez değeri, değiştirilmekte olan özelliğe göre bir türe dönüştürülür. Ayarlanan özellik zaten yoksa, dizeden tür dönüştürmesi yoktur. Değiştirilen özellik zaten varsa ve değeri bu türlerden Guidbiriyse , DateTimeOffsetTimeSpan, Uri, , DateTime, dize değişmez değeri bu türe dönüştürülür ve özellik değeri olarak ayarlanır. Daha açık olmak gerekirse, eylem dize değişmez değerini özellik türüne dönüştürmeye çalışır. Başarılı olursa özelliği ayarlanır. Aksi takdirde, kural eylemi değerlendirmesi bir özel durum oluşturur ve ileti teslim edilmiyor.

Sonraki adımlar