BUAT ATURAN (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

Membuat objek yang disebut aturan. Saat terikat ke kolom atau tipe data alias, aturan menentukan nilai yang dapat diterima yang dapat disisipkan ke dalam kolom tersebut.

Penting

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Kami menyarankan agar Anda menggunakan batasan pemeriksaan sebagai gantinya. Periksa batasan dibuat dengan menggunakan kata kunci CHECK DARI CREATE TABLE atau ALTER TABLE. Untuk informasi selengkapnya, lihat Batasan Unik dan Periksa Batasan.

Jenis data kolom atau alias hanya dapat memiliki satu aturan yang terikat padanya. Namun, kolom dapat memiliki aturan dan satu atau beberapa batasan pemeriksaan yang terkait dengannya. Jika ini benar, semua batasan dievaluasi.

Konvensi sintaks transact-SQL

Sintaksis

CREATE RULE [ schema_name . ] rule_name   
AS condition_expression  
[ ; ]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

schema_name
Adalah nama skema tempat aturan berada.

rule_name
Adalah nama aturan baru. Nama aturan harus mematuhi aturan untuk pengidentifikasi. Menentukan nama pemilik aturan bersifat opsional.

condition_expression
Adalah kondisi atau kondisi yang menentukan aturan. Aturan dapat berupa ekspresi apa pun yang valid dalam klausul WHERE dan dapat menyertakan elemen seperti operator aritmatika, operator relasional, dan predikat (misalnya, IN, LIKE, BETWEEN). Aturan tidak dapat mereferensikan kolom atau objek database lainnya. Fungsi bawaan yang tidak mereferensikan objek database dapat disertakan. Fungsi yang ditentukan pengguna tidak dapat digunakan.

condition_expression menyertakan satu variabel. tanda at (@) mendahului setiap variabel lokal. Ekspresi mengacu pada nilai yang dimasukkan dengan pernyataan UPDATE atau INSERT. Nama atau simbol apa pun dapat digunakan untuk mewakili nilai saat membuat aturan, tetapi karakter pertama harus berupa tanda (@).

Catatan

Hindari membuat aturan pada ekspresi yang menggunakan jenis data alias. Meskipun aturan dapat dibuat pada ekspresi yang menggunakan jenis data alias, setelah mengikat aturan ke jenis data kolom atau alias, ekspresi gagal dikompilasi saat direferensikan.

Keterangan

CREATE RULE tidak dapat dikombinasikan dengan pernyataan Transact-SQL lainnya dalam satu batch. Aturan tidak berlaku untuk data yang sudah ada di database pada saat aturan dibuat, dan aturan tidak dapat terikat ke jenis data sistem.

Aturan hanya dapat dibuat di database saat ini. Setelah Anda membuat aturan, jalankan sp_bindrule untuk mengikat aturan ke kolom atau ke jenis data alias. Aturan harus kompatibel dengan jenis data kolom. Misalnya, "@value LIKE A%" tidak dapat digunakan sebagai aturan untuk kolom numerik. Aturan tidak dapat terikat ke teks, ntext, gambar, varchar(max), nvarchar(max), varbinary(max), xml, tipe clr yang ditentukan pengguna, atau kolom tandawaktu. Aturan tidak dapat terikat ke kolom komputasi.

Sertakan konstanta karakter dan tanggal dengan tanda kutip tunggal (') dan mendahului konstanta biner dengan 0x. Jika aturan tidak kompatibel dengan kolom yang terikat, Mesin Database SQL Server mengembalikan pesan kesalahan saat nilai disisipkan, tetapi tidak saat aturan terikat.

Aturan yang terikat ke jenis data alias diaktifkan hanya saat Anda mencoba menyisipkan nilai ke dalam, atau untuk memperbarui, kolom database dari jenis data alias. Karena aturan tidak menguji variabel, jangan tetapkan nilai ke variabel jenis data alias yang akan ditolak oleh aturan yang terikat ke kolom dengan jenis data yang sama.

Untuk mendapatkan laporan tentang aturan, gunakan sp_help. Untuk menampilkan teks aturan, jalankan sp_helptext dengan nama aturan sebagai parameter . Untuk mengganti nama aturan, gunakan sp_rename.

Aturan harus dihilangkan dengan menggunakan DROP RULE sebelum aturan baru dengan nama yang sama dibuat, dan aturan harus tidak terikat dengan menggunakan sp_unbindrule sebelum dihilangkan. Untuk membatalkan ikatan aturan dari kolom, gunakan sp_unbindrule.

Anda dapat mengikat aturan baru ke kolom atau jenis data tanpa mengikat yang sebelumnya; aturan baru mengambil alih aturan sebelumnya. Aturan yang terikat ke kolom selalu diutamakan daripada aturan yang terikat ke jenis data alias. Mengikat aturan ke kolom menggantikan aturan yang sudah terikat ke jenis data alias kolom tersebut. Tetapi mengikat aturan ke jenis data tidak menggantikan aturan yang terikat ke kolom jenis data alias tersebut. Tabel berikut ini memperlihatkan prioritas yang berlaku saat aturan terikat ke kolom dan ke jenis data alias di mana aturan sudah ada.

Aturan baru terikat ke Aturan lama terikat ke

jenis data alias
Aturan lama terikat ke

Kolom
Jenis data alias Aturan lama diganti Tidak Ada Perubahan
Kolom Aturan lama diganti Aturan lama diganti

Jika kolom memiliki default dan aturan yang terkait dengannya, default harus berada dalam domain yang ditentukan oleh aturan. Default yang berkonflik dengan aturan tidak pernah disisipkan. Mesin Database SQL Server menghasilkan pesan kesalahan setiap kali mencoba menyisipkan default tersebut.

Izin

Untuk menjalankan CREATE RULE, minimal, pengguna harus memiliki izin CREATE RULE dalam database saat ini dan izin UBAH pada skema di mana aturan sedang dibuat.

Contoh

J. Membuat aturan dengan rentang

Contoh berikut membuat aturan yang membatasi rentang bilangan bulat yang disisipkan ke dalam kolom atau kolom tempat aturan ini terikat.

CREATE RULE range_rule  
AS   
@range>= $1000 AND @range <$20000;  

B. Membuat aturan dengan daftar

Contoh berikut membuat aturan yang membatasi nilai aktual yang dimasukkan ke dalam kolom atau kolom (yang aturan ini terikat) hanya untuk yang tercantum dalam aturan.

CREATE RULE list_rule  
AS   
@list IN ('1389', '0736', '0877');  

C. Membuat aturan dengan pola

Contoh berikut membuat aturan untuk mengikuti pola dari dua karakter yang diikuti dengan tanda hubung (-), sejumlah karakter atau tanpa karakter, dan berakhir dengan bilangan bulat dari 0 melalui 9.

CREATE RULE pattern_rule   
AS  
@value LIKE '__-%[0-9]'  

Lihat Juga

ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
BUAT TABEL (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
Ekspresi (Transact-SQL)
sp_bindrule (T-SQL)
sp_help (T-SQL)
sp_helptext (T-SQL)
sp_rename (T-SQL)
sp_unbindrule (T-SQL)
WHERE (Transact-SQL)