注意:condition_expression子句中的表達式必須以字符“@”開頭。
(2) 用enterprise manager 創建規則
在enterprise manager 中選擇數據庫對象“rules”,單擊右鍵從快捷菜單中選擇“newrule”選項,即會彈出如圖9-1 所示的創建規則屬性對話框。輸入規則名稱和表達式之后,單擊“確定”按鈕,即完成規則的創建。
9.2.2 查看規則
(1) 用enterprise manager 查看規則
在enterprise manager 中選擇“rules” 對象,即可從右邊的任務板中看到規則的大部分信息,包括規則的名稱、所有者、創建時間,等如圖9-2 所示。在sql server 2000 中不像7.0 版本可以直接在任務板中看到規則的表達式,這需要查看規則的屬性。可以選擇要查看的規則,單擊右鍵,從快捷菜單中選擇“properties” 選項,即會出現如圖9-3 所示的對話框,可以從中編輯規則的表達式。修改規則的名稱可以通過sp_rename 系統存儲過程進行,也可以直接在圖9-2 中用右鍵單擊要修改的規則,從快捷菜單中選擇“重命名(rename)” 菜單項,進行名稱修改。
(2) 用存儲過程sp_helptext 查看規則
使用sp_helptext 存儲過程可以查看規則的細節,其語法如下:
sp_helptext [@objname =] 'name'
其中[@objname =] 'name'子句指明對象的名稱,用sp_helptext 存儲過程查看的對象可
以是當前數據庫中的規則、缺省值、觸發器、視圖或未加密的存儲過程。
例9-5: 查看規則hire_date_rule。
exec sp_helptext hire_date_rule
運行結果如下:
text
--------------------------------------------------------------------------------------
create rule hire_date_rule
as @hire_date >= '1980-01-01' and @hire_date <= getdate()
9.2.3 規則的綁定與松綁
創建規則后,規則僅僅只是一個存在于數據庫中的對象,并未發生作用。需要將規則與數據庫表或用戶自定義對象聯系起來,才能達到創建規則的目的。聯系的方法稱為“綁定”。所謂綁定就是指定規則作用于哪個表的哪一列或哪個用戶自定義數據類型。表的一列或一個用戶自定義數據類型只能與一個規則相綁定,而一個規則可以綁定多對象,這正是規則的魅力所在。解除規則與對象的綁定稱為“松綁”。
(1) 用存儲過程sp_bindrule 綁定規則
存儲過程sp_bindrule 可以綁定一個規則到表的一個列或一個用戶自定義數據類型上。其語法如下:
sp_bindrule [@rulename =] 'rule',
[@objname =] 'object_name'
[, 'futureonly']
各參數說明如下:
[@rulename =] 'rule'
指定規則名稱。
[@objname =] 'object_name'
指定規則綁定的對象。
'futureonly'
此選項僅在綁定規則到用戶自定義數據類型上時才可以使用。當指定此選項時,僅以后使用此用戶自定義數據類型的列會應用新規則,而當前已經使用此數據類型的列則不受影響。
例9-6: 綁定規則hire_date_rule 到用戶自定義數據類型hire_date 上。
exec sp_bindrule hire_date_rule, hire_date
運行結果如下:
rule bound to data type.
the new rule has been bound to column(s) of the specified user data type.
例9-7: 綁定規則hire_date_rule 到用戶自定義數據類型hire_date 上,帶'futureonly'選項。
exec sp_bindrule hire_date_rule, hire_date, 'futureonly'
運行結果如下:
rule bound to data type.
例9-8: 綁定規則my_rule 到orders 表的字段order_id。
exec sp_bindrule id_rule, 'orders.[order_id]'
運行結果如下:
rule bound to table column.
注意:規則對已經輸入表中的數據不起作用。
規則所指定的數據類型必須與所綁定的對象的數據類型一致,且規則不能綁定一個數據類型為text、mage或timestamp的列。
與表的列綁定的規則優先于與用戶自定義數據類型綁定的列,因此,如果表的列的數據類型與規則a綁定,同時列又與規則b綁定,則以規則b為列的規則。
你可以直接用一個新的規則來綁定列或用戶自定義數據類型,而不需要先將其原來綁定的規則解除,系統會將早班規則覆蓋。
(2)用存儲過程sp_unbindrule 解除規則的綁定
存儲過程sp_unbindrule 可解除規則與列或用戶自定義數據類型的綁定,其語法如下:
sp_unbindrule [@objname =] 'object_name'
[,'futureonly']
其中'futureonly'選項同綁定時一樣,僅用于用戶自定義數據類型,它指定現有的用此用戶自定義數據類型定義的列仍然保持與此規則的綁定。如果不指定此項,所有由此用戶自定義數據類型定義的列也將隨之解除與此規則的綁定。
例9-9: 解除規則hire_date_rule 與用戶自定義數據類型birthday 的綁定,帶'futureonly'
選項。
exec sp_unbindrule birthday, 'futureonly'
運行結果如下:
(1 row(s) affected)
rule unbound from data type.
(3) 用enterprise manager 管理規則的綁定
在enterprise manager 中,選擇要進行綁定設置的規則,單擊右鍵,從快捷菜單中選擇“properties” 選項,即會出現如圖9-3 所示的規則屬性對話框。圖中的“bind udts…”按鈕用于綁定用戶自定義數據類型,“bind columns…” 按鈕用于綁定表的列。
在圖9-3 中單擊“bind udts…” 按鈕,則出現如圖9-4 所示的綁定規則到用戶自定義數據類型的對話框;單擊“bind columns…” 按鈕,則出現如圖9-5 所示的綁定規則到表的列的對話框。

9.2.4 刪除規則
可以在enterprise manager 中選擇規則,單擊右鍵,從快捷菜單中選擇“delete” 選項刪除規則,也可使用drop rule 命令刪除當前數據庫中的一個或多個規則。其語法如下:
drop rule {rule_name} [,...n]
注意:在刪除一個規則前,必須先將與其綁定的對象解除綁定。
例9-10: 刪除多個規則
drop rule mytest1_rule,mytest2_rule
新聞熱點
疑難解答