Sintaks Filter SQL Aturan Langganan

Filter SQL adalah salah satu tipe filter yang tersedia untuk langganan topik Bus Layanan. Ini adalah ekspresi teks yang berbasis pada subset dari standar SQL-92. Ekspresi filter digunakan dengan elemen sqlExpression properti 'sqlFilter' dari Bus Layanan Rule dalam templat Azure Resource Manager, atau argumen az servicebus topic subscription rule create perintah Azure CLI --filter-sql-expression, dan beberapa fungsi SDK yang memungkinkan pengelolaan aturan langganan. Ekspresi yang diizinkan ditampilkan di bagian ini.

Bus Layanan Premium juga mendukung sintaks pemilih pesan JMS SQL melalui 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>  
  

Argumen

  • <scope>adalah string opsional yang menunjukkan ruang lingkup<property_name>. Nilai yang valid adalah sys atau user.
    • Nilai sys menunjukkan cakupan sistem yang di dalamnya <property_name> merupakan salah satu properti pada pesan Microsoft Azure Service Bus seperti yang dijelaskan dalam Pesan, payload, dan serialisasi.
    • Nilai user menunjukkan cakupan pengguna di mana <property_name> adalah kunci dari properti kustom yang dapat Anda atur pada pesan saat mengirim ke Bus Layanan.
    • Cakupan user adalah cakupan default apabila <scope> tidak ditentukan.

Keterangan

Upaya untuk mengakses properti sistem yang tidak ada adalah kesalahan, sementara upaya untuk mengakses properti pengguna yang tidak ada bukanlah kesalahan. Sebagai gantinya, properti pengguna yang tidak ada dievaluasi secara internal sebagai nilai yang tidak diketahui. Nilai yang tidak diketahui diperlakukan secara khusus selama evaluasi operator.

property_name

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

Argumen

<regular_identifier> adalah string yang diwakili oleh ekspresi reguler berikut:

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

Tata bahasa ini berarti setiap string yang dimulai dengan huruf dan diikuti oleh satu atau beberapa garis bawah/huruf/digit.

[:IsLetter:] berarti setiap karakter Unicode yang dikategorikan sebagai huruf Unicode. System.Char.IsLetter(c) mengembalikan true jika c adalah huruf Unicode.

[:IsDigit:] berarti setiap karakter Unicode yang dikategorikan sebagai digit desimal. System.Char.IsDigit(c) mengembalikan true jika c adalah digit Unicode.

<regular_identifier> tidak dapat menjadi kata kunci yang dicadangkan.

<delimited_identifier> adalah string apa pun yang diapit oleh tanda kurung siku kiri/kanan ([]). Tanda kurung siku diwakili sebagai dua tanda kurung siku. Berikut ini adalah contoh <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> adalah string apa pun yang diapit oleh tanda kutip ganda. Tanda kutip ganda dalam pengenal direpresentasikan sebagai dua tanda kutip ganda. Tidak disarankan untuk menggunakan pengenal yang dikutip karena dapat dengan mudah disalahartikan sebagai konstanta string. Gunakan pengidentifikasi yang dibatasi jika memungkinkan. Berikut contoh dari <quoted_identifier>:

"Contoso & Northwind"  

pola

<pattern> ::=  
      <expression>  

Keterangan

<pattern> harus merupakan ekspresi yang dievaluasi sebagai string. Ini digunakan sebagai pola untuk operator LIKE. Ini dapat berisi karakter wildcard berikut:

  • %: Karakter apa pun yang terdiri dari nol karakter atau lebih.

  • _: Setiap karakter tunggal.

escape_char

<escape_char> ::=  
      <expression>  

Keterangan

<escape_char> harus merupakan ekspresi yang dievaluasi sebagai string panjang 1. Ini digunakan sebagai karakter pelarian untuk operator LIKE.

Misalnya, property LIKE 'ABC\%' ESCAPE '\' mencocokkan ABC% daripada string yang dimulai dengan ABC.

constant

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

Argumen

  • <integer_constant> adalah rangkaian angka yang tidak diapit tanda kutip dan tidak berisi titik desimal. Nilai disimpan sebagai System.Int64 secara internal, dan mengikuti rentang yang sama.

    Berikut adalah contoh konstanta panjang:

    1894  
    2  
    
  • <decimal_constant> adalah string angka yang tidak diapit dalam tanda kutip, dan berisi koma desimal. Nilai disimpan sebagai System.Double secara internal, dan mengikuti rentang/presisi yang sama.

    Di versi yang akan datang, nomor ini mungkin disimpan dalam jenis data yang berbeda untuk mendukung semantik angka yang tepat, jadi Anda tidak boleh mengandalkan fakta bahwa jenis data yang mendasarinya adalah System.Double untuk <decimal_constant>.

    Berikut adalah contoh konstanta desimal:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> adalah angka yang ditulis dalam notasi ilmiah. Nilai disimpan sebagai System.Double secara internal, dan mengikuti rentang/presisi yang sama. Berikut adalah contoh perkiraan konstanta angka:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Keterangan

Konstanta Boolean diwakili oleh kata kunci TRUE atau FALSE. Nilai disimpan sebagai System.Boolean.

string_constant

<string_constant>  

Keterangan

Konstanta string diapit dalam tanda kutip tunggal dan menyertakan karakter Unicode yang valid. Tanda kutip tunggal yang disematkan dalam konstanta string direpresentasikan sebagai dua tanda kutip tunggal.

fungsi

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

Keterangan

Fungsi newid() mengembalikan System.Guid yang dihasilkan oleh metode System.Guid.NewGuid().

Fungsi property(name) mengembalikan nilai properti yang direferensikan oleh name. Nilai name dapat berupa ekspresi valid apa pun yang mengembalikan nilai string.

Pertimbangan

Pertimbangkan semantik Filter Sql berikut ini:

  • Nama properti peka huruf besar/kecil.

  • Operator mengikuti semantik konversi implisit C# jika memungkinkan.

  • Properti sistem merupakan properti pada pesan Service Bus seperti yang dijelaskan dalam Pesan, payload, dan serialisasi.

    Pertimbangkan semantik IS [NOT] NULL berikut:

    • property IS NULLdievaluasi sebagaitrue jika salah satu properti tidak ada atau nilai properti adalah null.

Semantik evaluasi properti

  • Upaya untuk mengevaluasi properti sistem yang tidak ada memberikan FilterException pengecualian.

  • Properti yang tidak ada dievaluasi secara internal sebagai tidak diketahui.

    Evaluasi yang tidak diketahui dalam operator aritmatika:

  • Untuk operator biner, jika sisi kiri atau kanan operan dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.

  • Untuk operator unary, jika operand dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.

    Evaluasi yang tidak diketahui dalam operator perbandingan biner:

  • Jika sisi kiri atau kanan operand dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.

    Evaluasi tidak diketahui di [NOT] LIKE:

  • Jika ada operand yang dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.

    Evaluasi tidak diketahui di [NOT] IN:

  • Jika operan kiri dievaluasi sebagai tidak diketahui, maka hasilnya adalah tidak diketahui.

    Evaluasi tidak diketahui di operator AND:

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

Evaluasi tidak diketahui di operator OR:

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

Operator mengikat semantik

  • Operator perbandingan seperti >, >=, <, <=, !=, dan = mengikuti semantik yang sama dengan operator C # yang mengikat dalam promosi tipe data dan konversi implisit.

  • Operator aritmatika seperti +, -, *, /, dan % mengikuti semantik yang sama dengan operator C # yang mengikat dalam promosi tipe data dan konversi implisit.

Contoh

Misalnya, lihat Contoh filter Service Bus.

Langkah berikutnya