?? 12.1.2 為用戶定義的數(shù)據(jù)類型綁定規(guī)則示例.sql
字號(hào):
/*--示例說明
下面的示例演示了如何把規(guī)則綁定到列和用戶定義的數(shù)據(jù)類型
并且演示了修改綁定于列和用戶定義的數(shù)據(jù)類型的規(guī)則時(shí),這兩者之間的差異。
--*/
--定義數(shù)據(jù)類型
EXEC sp_addtype 'ut_age','int','null'
GO
--為ut_age定義規(guī)則
CREATE RULE r_ut_age
AS
@age between 0 and 200
GO
--將規(guī)則綁定到用戶定義的數(shù)據(jù)類型
EXEC sp_bindrule 'r_ut_age','ut_age'
GO
--使用定義的數(shù)據(jù)類型
CREATE TABLE tb(
Name nvarchar(20),
AGE_u ut_age,
AGE int)
GO
--直接將規(guī)則綁定到列
EXEC sp_bindrule 'r_ut_age','tb.AGE'
GO
--插入數(shù)據(jù)
INSERT tb VALUES('AA',10,0)
INSERT tb VALUES('BB',10,210)
/*--這條記錄違反了規(guī)則,所以會(huì)收到錯(cuò)誤信息
服務(wù)器: 消息 513,級(jí)別 16,狀態(tài) 1,行 1
列的插入或更新與先前的 CREATE RULE 語句所強(qiáng)制的規(guī)則沖突。該語句已終止。沖突發(fā)生于數(shù)據(jù)庫 'tempdb',表 'tb',列 'AGE'。
--*/
GO
--創(chuàng)建一個(gè)新規(guī)則
CREATE RULE r_ut_age1
AS
@age between 20 and 300
GO
--將新規(guī)則綁定到列
EXEC sp_bindrule 'r_ut_age1','tb.AGE'
INSERT tb VALUES('BB',10,210)
--綁定新規(guī)則到列時(shí),新規(guī)則在插入數(shù)據(jù)時(shí)立即生效
GO
--使用futureonly選項(xiàng)將新規(guī)則綁定到定義的數(shù)據(jù)類型
EXEC sp_bindrule 'r_ut_age1','ut_age',futureonly
INSERT tb VALUES('CC',10,210)
INSERT tb VALUES('DD',210,210)
SELECT * FROM tb
/*--結(jié)果
綁定新規(guī)則到定義的數(shù)據(jù)類型時(shí),如果指定 futureonly 參數(shù),則已經(jīng)表中已經(jīng)定義的列不使用新規(guī)則
所以第二條插入語句收到如何錯(cuò)誤信息:
服務(wù)器: 消息 513,級(jí)別 16,狀態(tài) 1,行 1
列的插入或更新與先前的 CREATE RULE 語句所強(qiáng)制的規(guī)則沖突。該語句已終止。沖突發(fā)生于數(shù)據(jù)庫 'tempdb',表 'tb',列 'AGE_u'。
表中的現(xiàn)有數(shù)據(jù)為:
Name AGE_u AGE
-------------------- ----------- -----------
AA 10 0
BB 10 210
CC 10 210
--*/
GO
--刪除定義的規(guī)則
DROP RULE r_ut_age,r_ut_age1
/*--由于規(guī)則已經(jīng)綁定到用戶定義的數(shù)據(jù)類型和列,所以收到如下錯(cuò)誤信息
服務(wù)器: 消息 3716,級(jí)別 16,狀態(tài) 1,行 3
無法除去 規(guī)則 'r_ut_age',因?yàn)樗壎ǖ搅艘粋€(gè)或多個(gè) 列 上。
服務(wù)器: 消息 3716,級(jí)別 16,狀態(tài) 1,行 3
無法除去 規(guī)則 'r_ut_age1',因?yàn)樗壎ǖ搅艘粋€(gè)或多個(gè) 列 上。
--*/
GO
--按順序刪除就可以了
DROP TABLE tb
EXEC sp_droptype 'ut_age'
DROP RULE r_ut_age,r_ut_age1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -