CREATE RULE CREATE RULE - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
創(chuàng)建稱為
CREATE RULE rule
AS condition_expression
rule
是新規(guī)則的名稱。規(guī)則名稱必須符合標(biāo)識符規(guī)則??梢赃x擇是否指定規(guī)則所有者的名稱。
condition_expression
是定義規(guī)則的條件。規(guī)則可以是 WHERE 子句中任何有效的表達(dá)式,并且可以包含諸如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞(如 IN、LIKE、BETWEEN)之類的元素。規(guī)則不能引用列或其它數(shù)據(jù)庫對象??梢园灰脭?shù)據(jù)庫對象的內(nèi)置函數(shù)。
condition_expression 包含一個變量。每個局部變量的前面都有一個 @ 符號。該表達(dá)式引用通過 UPDATE 或 INSERT 語句輸入的值。在創(chuàng)建規(guī)則時,可以使用任何名稱或符號表示值,但第一個字符必須是 @ 符號。
在單個批處理中,CREATE RULE 語句不能與其它 Transact-SQL 語句組合使用。規(guī)則不適用于在創(chuàng)建規(guī)則時已存在于數(shù)據(jù)庫中的數(shù)據(jù),而且規(guī)則不能綁定到系統(tǒng)數(shù)據(jù)類型。規(guī)則只能在當(dāng)前的數(shù)據(jù)庫中創(chuàng)建。創(chuàng)建規(guī)則后,執(zhí)行 sp_bindrule 可將規(guī)則綁定到列或用戶定義數(shù)據(jù)類型。
規(guī)則必須與列的數(shù)據(jù)類型兼容。規(guī)則不能綁定到 text、image 或 timestamp 列。一定要用單引號 (') 將字符和日期常量引起來,在二進(jìn)制常量前加 0x。例如,不能將 "@value LIKE A%" 用作數(shù)字列的規(guī)則。如果規(guī)則與其所綁定的列不兼容,Microsoft? SQL Server? 將在插入值時(而不是在綁定規(guī)則時)返回錯誤信息。
對于用戶定義數(shù)據(jù)類型,只有嘗試在該類型的數(shù)據(jù)庫列中插入值,或更新該類型的數(shù)據(jù)庫列時,綁定到該類型的規(guī)則才會激活。因?yàn)橐?guī)則不檢驗(yàn)變量,所以在向用戶定義數(shù)據(jù)類型的變量賦值時,不要賦予綁定到該數(shù)據(jù)類型的列的規(guī)則所拒絕的值。
若要獲得關(guān)于規(guī)則的報(bào)表,請使用 sp_help。若要顯示某條規(guī)則的文本,請以該規(guī)則的名稱作為參數(shù)來執(zhí)行存儲過程 sp_helptext。若要重命名規(guī)則,請使用 sp_rename。
要創(chuàng)建與原有規(guī)則同名的新規(guī)則,必須在創(chuàng)建新規(guī)則之前將原有規(guī)則除去(使用 DROP RULE),而在除去規(guī)則之前,必須首先解除綁定(使用 sp_unbindrule)。使用 sp_unbindrule 解除規(guī)則與列的綁定。
可以在不解除原有綁定的情況下將新規(guī)則綁定到列或數(shù)據(jù)類型;新規(guī)則將替代原有規(guī)則。綁定到列的規(guī)則總是優(yōu)先于綁定到用戶定義數(shù)據(jù)類型的規(guī)則。將規(guī)則綁定到列時,該規(guī)則將替換已經(jīng)綁定到該列的用戶定義數(shù)據(jù)類型的規(guī)則。但是,將規(guī)則綁定到用戶定義數(shù)據(jù)類型時,該規(guī)則不會替換綁定到該數(shù)據(jù)類型的列的規(guī)則。下表顯示了當(dāng)將規(guī)則綁定到已經(jīng)存在規(guī)則的列和用戶定義數(shù)據(jù)類型時,規(guī)則生效的優(yōu)先順序。
舊規(guī)則綁定到 | ||
---|---|---|
新規(guī)則綁定到 | 用戶定義數(shù)據(jù)類型 | 列 |
用戶定義數(shù)據(jù)類型 | 舊規(guī)則被替換 | 沒有變化 |
列 | 舊規(guī)則被替換 | 舊規(guī)則被替換 |
如果列同時有默認(rèn)值和規(guī)則與之關(guān)聯(lián),則默認(rèn)值必須滿足規(guī)則的定義。與規(guī)則沖突的默認(rèn)值永遠(yuǎn)不能插入列。每次試圖插入這樣的默認(rèn)值時,SQL Server 都會生成錯誤信息。
說明 SQL Server 是將空字符串解釋為單個空格還是真正的空字符串取決于 sp_dbcmptlevel 的設(shè)置。如果兼容級別小于或等于 65,SQL Server 就將空字符串解釋為單個空格。如果兼容級別等于 70,則 SQL Server 將空字符串解釋為空字符串。有關(guān)更多信息,請參見 sp_dbcmptlevel。
CREATE RULE 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員和 db_ddladmin 和 db_owner 固定數(shù)據(jù)庫角色成員。sysadmin、db_owner 和 db_securityadmin 角色的成員可以將權(quán)限轉(zhuǎn)讓給其他用戶。
下例創(chuàng)建一個規(guī)則,用以限制插入該規(guī)則所綁定的列中的整數(shù)范圍。
CREATE RULE range_rule
AS
@range >= $1000 AND @range < $20000
下例創(chuàng)建一個規(guī)則,用以將輸入到該規(guī)則所綁定的列中的實(shí)際值限制為只能是該規(guī)則中列出的值。
CREATE RULE list_rule
AS
@list IN ('1389', '0736', '0877')
下例創(chuàng)建一個遵循這種模式的規(guī)則:任意兩個字符的后面跟一個連字符和任意多個字符(或沒有字符),并以 0 到 9 之間的整數(shù)結(jié)尾。
CREATE RULE pattern_rule
AS
@value LIKE '_ _-%[0-9]'
相關(guān)文章