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 .

Konvensi sintaks transact-SQL

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