Aturan Langganan Sintaks Tindakan SQL

Tindakan SQL digunakan untuk memanipulasi metadata pesan setelah pesan dipilih oleh filter aturan langganan. Ini adalah ekspresi teks yang berbasis pada subset dari standar SQL-92. Ekspresi tindakan digunakan dengan elemen sqlExpression properti 'tindakan' dari Service BusRule di templat Azure Resource Manager, atau perintah Azure CLI az servicebus topic subscription rule create--action-sql-expression , dan beberapa fungsi SDK yang memungkinkan pengelolaan aturan langganan.

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

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:]]*  

Ini berarti string apa pun 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.

Terus-menerus

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

Function

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

Saat ini, newid() dan property(name) merupakan satu-satunya fungsi yang didukung.

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.

Contoh

Misalnya, lihat Contoh filter Service Bus.

Pertimbangan

  • SET digunakan untuk membuat properti baru atau memperbarui nilai properti yang sudah ada.
  • REMOVE digunakan untuk menghapus properti pengguna. Hanya properti pengguna yang dapat dihapus, bukan properti sistem.
  • SET melakukan konversi impilisit, jika memungkinkan, ketika jenis ekspresi dan jenis properti yang ada berbeda.
  • Tindakan gagal jika properti sistem yang tidak ada dirujuk.
  • Tindakan tidak gagal jika properti pengguna yang tidak ada dirujuk.
  • Properti pengguna yang tidak ada dievaluasi sebagai "Tidak Diketahui" secara internal, mengikuti semantik yang sama dengan SQLRuleFilter saat mengevaluasi operator.

Poin penting

Berikut adalah beberapa poin penting:

  • Hanya properti pada pesan yang dapat dimodifikasi.
  • Semua properti pengguna dapat dimodifikasi.
  • Semua properti sistem yang dapat diperbarui secara publik juga dapat dimodifikasi, seperti ReplyTo dan CorreationId, tetapi kami sarankan Anda tidak mengubah properti sistem sebagai bagian dari tindakan aturan. Ini masih diizinkan karena alasan kompatibilitas mundur.
  • Saat mengatur properti, hanya literal numerik, Boolean, dan string yang diizinkan. String harfiah pada gilirannya dikonversi ke jenis berdasarkan properti yang sedang dimodifikasi. Jika properti yang ditetapkan belum ada, tidak ada konversi jenis dari string. Jika properti yang sedang dimodifikasi sudah ada dan nilainya adalah salah satu jenis Guidini , , DateTimeOffset, TimeSpanUri, DateTime, maka string literal dikonversi ke jenis tersebut dan ditetapkan sebagai nilai properti. Agar lebih spesifik, tindakan mencoba mengonversi string literal ke jenis properti. Jika berhasil, properti diatur. Jika tidak, evaluasi tindakan aturan akan melemparkan pengecualian dan pesan tersebut di-dead-letter.

Langkah berikutnya