sp_bindrule (T-SQL)
Berlaku untuk: SQL ServerAzure SQL Database
Mengikat aturan ke kolom atau ke jenis data alias.
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. Gunakan Batasan unik dan periksa batasan sebagai gantinya. Batasan CHECK dibuat dengan menggunakan kata kunci CHECK dari pernyataan CREATE TABLE atau ALTER TABLE .
Sintaks
sp_bindrule
[ @rulename = ] N'rulename'
, [ @objname = ] N'objname'
[ , [ @futureonly = ] 'futureonly' ]
[ ; ]
Argumen
[ @rulename = ] N'rulename'
Nama aturan yang dibuat oleh CREATE RULE
pernyataan. @rulename adalah nvarchar(776), tanpa default.
[ @objname = ] N'objname'
Tabel dan kolom, atau jenis data alias yang aturannya akan diikat. @objname adalah nvarchar(776), tanpa default.
Aturan tidak dapat diikat ke teks, ntext, gambar, varchar(max), nvarchar(max), varbinary(max), xml, jenis clr yang ditentukan pengguna, atau kolom tanda waktu. Aturan tidak dapat terikat ke kolom komputasi.
@objname adalah nvarchar(776) tanpa default. Jika @objname adalah nama satu bagian, itu diselesaikan sebagai jenis data alias. Jika itu adalah nama dua atau tiga bagian, pertama-tama diselesaikan sebagai tabel dan kolom; jika resolusi ini gagal, resolusi diselesaikan sebagai jenis data alias. Secara default, kolom yang ada dari jenis data alias mewarisi @rulename kecuali aturan terikat langsung ke kolom.
@objname dapat berisi karakter tanda kurung siku ([
dan ]
) sebagai karakter pengidentifikasi yang dibatasi. Untuk informasi selengkapnya, lihat Pengidentifikasi database.
Aturan yang dibuat pada ekspresi yang menggunakan jenis data alias dapat terikat ke jenis data kolom atau alias, tetapi gagal dikompilasi saat direferensikan. Hindari menggunakan aturan yang dibuat pada jenis data alias.
[ @futureonly = ] 'futureonly'
Digunakan hanya saat mengikat aturan ke jenis data alias. @futureonly adalah varchar(15), dengan default NULL
. Parameter ini, ketika diatur ke futureonly
, mencegah kolom yang ada dari jenis data alias mewarisi aturan baru. Jika @futureonly adalah NULL
, aturan baru terikat ke kolom apa pun dari jenis data alias yang saat ini tidak memiliki aturan atau yang menggunakan aturan yang ada dari jenis data alias.
Mengembalikan nilai kode
0
(berhasil) atau 1
(kegagalan).
Keterangan
Anda dapat mengikat aturan baru ke kolom (meskipun menggunakan CHECK
batasan lebih disukai) atau ke jenis data alias dengan sp_bindrule
tanpa mengikat aturan yang ada. Aturan lama ditimpa. Jika aturan terikat ke kolom dengan batasan CHECK
yang ada, semua batasan dievaluasi. Anda tidak dapat mengikat aturan ke jenis data SQL Server.
Aturan diberlakukan ketika INSERT
pernyataan dicoba, bukan pada pengikatan. Anda dapat mengikat aturan karakter ke kolom jenis data numerik , meskipun operasi tersebut INSERT
tidak valid.
Kolom yang ada dari jenis data alias mewarisi aturan baru kecuali @futureonly ditentukan sebagai futureonly
. Kolom baru yang ditentukan dengan jenis data alias selalu mewarisi aturan. Namun, jika ALTER COLUMN
klausul ALTER TABLE
pernyataan mengubah tipe data kolom ke jenis data alias yang terikat ke aturan, aturan yang terikat ke jenis data tidak diwariskan oleh kolom. Aturan harus secara khusus terikat ke kolom dengan menggunakan sp_bindrule
.
Saat Anda mengikat aturan ke kolom, informasi terkait ditambahkan ke sys.columns
tabel. Saat Anda mengikat aturan ke jenis data alias, informasi terkait ditambahkan ke sys.types
tabel.
Izin
Untuk mengikat aturan ke kolom tabel, Anda harus memiliki ALTER
izin pada tabel. CONTROL
izin pada jenis data alias, atau ALTER
izin pada skema tempat jenis berada, diperlukan untuk mengikat aturan ke jenis data alias.
Contoh
J. Mengikat aturan ke kolom
Dengan asumsi bahwa aturan bernama today
dibuat dalam database saat ini dengan menggunakan CREATE RULE
pernyataan , contoh berikut mengikat aturan ke HireDate
kolom Employee
tabel. Saat baris ditambahkan ke Employee
, data untuk HireDate
kolom dicentang terhadap today
aturan.
USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate';
B. Mengikat aturan ke tipe data alias
Dengan asumsi keberadaan aturan bernama rule_ssn
dan jenis data alias bernama ssn
, contoh berikut mengikat rule_ssn
ke ssn
. Dalam pernyataan CREATE TABLE
, kolom jenis ssn
mewarisi rule_ssn
aturan. Kolom jenis ssn
yang ada juga mewarisi rule_ssn
aturan, kecuali jika futureonly ditentukan untuk @futureonly, atau ssn
memiliki aturan yang terikat langsung ke aturan tersebut. Aturan yang terikat ke kolom selalu diutamakan daripada default yang terikat ke jenis data.
USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn';
C. futureonly
Gunakan opsi
Contoh berikut mengikat rule_ssn
aturan ke jenis ssn
data alias . Karena futureonly
ditentukan, tidak ada kolom jenis ssn
yang terpengaruh.
USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly';
D. Menggunakan pengidentifikasi yang dibatasi
Contoh berikut menunjukkan penggunaan pengidentifikasi yang dibatasi dalam parameter @objname .
USE master;
GO
CREATE TABLE [t.2] (c1 int) ;
-- Notice the period as part of the table name.
EXEC sp_bindrule rule1, '[t.2].c1' ;
-- The object contains two periods;
-- the first is part of the table name
-- and the second distinguishes the table name from the column name.