共用方式為


訂用帳戶規則 SQL 篩選語法

SQL 篩選是服務匯流排主題訂用帳戶的其中一個可用篩選類型。 此動作是依賴 SQL-92 標準子集的文字運算式。 篩選運算式會與 Azure Resource Manager 範本中服務匯流排 Rule 'sqlFilter' 屬性的 sqlExpression 元素,或 Azure CLI az servicebus topic subscription rule create 命令的 --filter-sql-expression 引數,以及數個允許管理訂用帳戶規則的 SDK 函數搭配使用。 本節會顯示允許的運算式。

服務匯流排進階層也透過 JMS 2.0 API 支援 JMS SQL 訊息選取器語法

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

引數

  • <scope> 是表示 <property_name> 範圍的選擇性字串。 有效值為 sysuser
    • sys 值表示系統範圍,其中 <property_name> 是服務匯流排訊息上的任何屬性,如訊息、承載和序列化中所述。
    • user 值表示使用者範圍,其中 <property_name> 是傳送至服務匯流排時可在訊息上設定的自訂屬性金鑰。
    • 如果未指定 <scope>,則 user 範圍是預設範圍。

備註

嘗試存取不存在的系統屬性時會發生錯誤,而嘗試存取不存在的使用者屬性時不會發生錯誤。 反之,不存在的使用者屬性會在內部評估為未知的值。 未知的值在運算子評估期間會特別處理。

property_name

<property_name> ::=  
     <identifier>  
     | <delimited_identifier>  
  
<identifier> ::=  
     <regular_identifier> | <quoted_identifier> | <delimited_identifier>  
  

引數

<regular_identifier> 是由下列規則運算式所表示的字串︰

[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*  

此文法表示任何以字母為開頭且後面跟著一或多個底線/字母/數字的字串。

[:IsLetter:] 表示分類為 Unicode 字母的任何 Unicode 字元。 如果 c 為 Unicode 字母,System.Char.IsLetter(c) 會傳回 true

[:IsDigit:] 表示分類為十進位數字的任何 Unicode 字元。 如果 c 為 Unicode 數字,System.Char.IsDigit(c) 會傳回 true

<regular_identifier> 不能是保留的關鍵字。

<delimited_identifier> 是使用左/右方括弧 ([]) 括住的任何字串。 右方括弧會以兩個右方括弧代表。 以下為 <delimited_identifier>的範例:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> 是以雙引號括住的任何字串。 識別項中的雙引號會以兩個雙引號表示。 不建議使用引號識別項,因為其容易與字串常數造成混淆。 盡可能使用分隔的識別碼。 以下是 <quoted_identifier> 的範例:

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

備註

<pattern> 必須是評估為字串的運算式。 其是用作 LIKE 運算子的模式。 它可以包含下列萬用字元︰

  • %:任何含有零或多個字元的字串。

  • _︰任何單一字元。

escape_char

<escape_char> ::=  
      <expression>  

備註

<escape_char> 必須是評估為字串為 1 的運算式。 其是用作 LIKE 運算子的逸出字元。

例如,property LIKE 'ABC\%' ESCAPE '\' 符合 ABC% 而不是以 ABC開頭的字串。

constant

<constant> ::=  
      <integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL  

引數

  • <integer_constant> 是一串數字,不會以引號括住且不包含小數點。 值會在內部儲存為 System.Int64,並遵循相同的範圍。

    以下是長常數的範例:

    1894  
    2  
    
  • <decimal_constant> 是一串數字,不會以引號括住且包含小數點。 值會在內部儲存為 System.Double,並遵循相同的範圍/精確度。

    在未來版本中,這個數字可能會以不同的資料類型儲存,以支援實際數字的語意,因此您不應依賴下列事實:<decimal_constant> 的基礎資料類型是 System.Double

    以下是 decimal 常數的範例:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> 是以科學記號標記法撰寫的數字。 值會在內部儲存為 System.Double,並遵循相同的範圍/精確度。 以下是大約數字常數的範例:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

備註

布林值常數由關鍵字 TRUEFALSE 代表。 值會儲存為 System.Boolean

string_constant

<string_constant>  

備註

字串常數會以單引號括住,且包含任何有效的 Unicode 字元。 內嵌在字串常數中的單引號會以兩個單引號表示。

函數

<function> :=  
      newid() |  
      property(name) | p(name)  

備註

newid() 函數會傳回由 System.Guid.NewGuid() 方法所產生的 System.Guid

property(name) 函式會傳回 name所參考的屬性值 。 name 可以是任何會傳回字串值的有效運算式。

考量

請考慮下列 SQL 篩選語意:

  • 屬性名稱不區分大小寫。

  • 後接 C# 的運算子儘可能隱含轉換語意。

  • 系統屬性是服務匯流排訊息上的任何屬性,如訊息、承載和序列化中所述。

    考量以下 IS [NOT] NULL 語意:

    • 如果屬性不存在或屬性的值是 nullproperty IS NULL 會評估為 true

屬性評估語意

  • 嘗試評估不存在的系統屬性會擲回 FilterException 例外狀況。

  • 不存在的屬性會在內部評估為未知

    算術運算子的未知評估︰

  • 針對二進位運算子,如果左邊或右邊的運算元評估為未知,則結果為未知

  • 針對一元運算子,如果運算元評估為未知,則結果為未知

    二進位比較運算子的未知評估︰

  • 如果左邊或右邊的運算元評估為未知,則結果為未知

    [NOT] LIKE 中的未知評估:

  • 如果任何運算元評估為未知,則結果為未知

    [NOT] IN 中的未知評估:

  • 如果左運算元評估為未知,則結果為未知

    AND 運算子的未知評估︰

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

OR 運算子的未知評估︰

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

運算子繫結語意

  • >>=<<=!== 等比較運算子會遵循與資料類型升級和隱含轉換中的 C# 運算子繫結相同的語意。

  • +-*/% 等算術運算子會遵循與資料類型升級和隱含轉換中的 C# 運算子繫結相同的語意。

範例

如需範例,請參閱服務匯流排篩選條件範例

下一步