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 adalahsys
atauuser
.- 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.
- Nilai
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 sebagaiSystem.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 sebagaiSystem.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 sebagaiSystem.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()
mengembalikanSystem.Guid
yang dihasilkan oleh metodeSystem.Guid.NewGuid()
. - Fungsi
property(name)
mengembalikan nilai properti yang direferensikan olehname
. Nilainame
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
danCorreationId
, 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
Guid
ini , ,DateTimeOffset
,TimeSpan
Uri
,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.