共用方式為


sp_bindrule (Transact-SQL)

將規則繫結到資料行或別名資料類型。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 請改用 唯一條件約束與檢查條件約束。CHECK 條件約束是利用 CREATE TABLEALTER TABLE 陳述式的 CHECK 關鍵字來建立的。

適用於:SQL Server (SQL Server 2008 至目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

sp_bindrule [ @rulename = ] 'rule' , 
     [ @objname = ] 'object_name' 
     [ , [ @futureonly = ] 'futureonly_flag' ] 

引數

  • [ @rulename=] 'rule'
    這是 CREATE RULE 陳述式所建立之規則的名稱。 rule 是 nvarchar(776),沒有預設值。

  • [ @objname=] 'object_name'
    這是規則將繫結的資料表和資料行或別名資料類型。 規則無法繫結到 text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、CLR 使用者自訂類型或 timestamp 資料行。 規則無法繫結到計算資料行。

    object_name 是 nvarchar(776),沒有預設值。 如果 object_name 是單部份的名稱,就會將它解析成別名資料類型。 如果它是兩部分或三部分的名稱,就會先將它解析成資料表和資料行;如果這項解析失敗,就會將它解析成別名資料類型。 依預設,除非規則直接繫結到資料行,否則,別名資料類型的現有資料行會繼承 rule。

    注意

    object_name 可以包含方括號字元 [] 來作為分隔的識別碼字元。如需詳細資訊,請參閱<資料庫識別碼>。

    注意

    雖然在使用別名資料類型的運算式上建立的規則可以繫結到資料行或別名資料類型,但在參考它們時,會無法編譯它們。請避免使用在別名資料類型上建立的規則。

  • [ @futureonly= ] 'futureonly_flag'
    只有將規則繫結到別名資料類型時,才會使用這個項目。 future_only_flag 是 varchar(15),預設值是 NULL。 當這個參數設為 futureonly 時,它會防止別名資料類型的現有資料行繼承新規則。 如果 futureonly_flag 是 NULL,新規則會繫結到別名資料類型目前沒有規則的任何資料行,或使用別名資料類型現有規則的任何資料行。

傳回碼值

0 (成功) 或 1 (失敗)

備註

在未繫結現有規則的情況下,您可以利用 sp_bindrule,將新規則繫結到資料行 (不過,最好使用 CHECK 條件約束),或繫結到別名資料類型。 此時會覆寫舊規則。 如果規則是利用現有 CHECK 條件約束來繫結到資料行,便會評估所有限制。 您不能將規則繫結到 SQL Server 資料類型。

在嘗試 INSERT 陳述式時,而非在繫結時,會強制執行這個規則。 您可以將字元規則繫結到 numeric 資料類型的資料行,不過,這類 INSERT 作業無效。

除非 futureonly_flag 指定為 futureonly,否則,別名資料類型的現有資料行會繼承新的規則。 以別名資料類型來定義的新資料行一律會繼承這個規則。 不過,如果 ALTER TABLE 陳述式的 ALTER COLUMN 子句將資料行的資料類型改成繫結於規則的別名資料類型,資料行不會繼承繫結於資料類型的規則。 您必須利用 sp_bindrule,將規則明確繫結到資料行。

當您將規則繫結到資料行時,會將相關資訊加入 sys.columns 資料表中。 當您將規則繫結到別名資料類型時,會將相關資訊加入 sys.types 資料表中。

權限

若要將規則繫結到資料表資料行,您必須具有資料表的 ALTER 權限。 將規則繫結到別名資料類型時,需要別名資料類型的 CONTROL 權限,或類型所屬之結構描述的 ALTER 權限。

範例

A.將規則繫結到資料行

假設已利用 CREATE RULE 陳述式,在目前資料庫中建立名稱為 today 的規則,下列範例會將規則繫結到 Employee 資料表的 HireDate 資料行。 當資料列加入 Employee 時,會針對 today 規則來檢查 HireDate 資料行。

USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate';

B.將規則繫結到別名資料類型

假設有一個名稱為 rule_ssn 的規則及名稱為 ssn 別名資料類型存在,下列範例會將 rule_ssn 繫結到 ssn。 在 CREATE TABLE 陳述式中,ssn 類型的資料行會繼承 rule_ssn 規則。 除非將 futureonly 指定給 futureonly_flag,或 ssn 有直接繫結的規則,否則,ssn 類型的現有資料行也會繼承 rule_ssn 規則。 繫結到資料行的規則,一律優先於繫結到資料類型的規則。

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn';

C.使用 futureonly_flag

下列範例將 rule_ssn 規則繫結到別名資料類型 ssn。 由於指定了 futureonly,不會影響任何現有 ssn 類型的資料行。

USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly';

D.使用分隔識別碼

下列範例會顯示如何在 object_name 參數中使用分隔識別碼。

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.

請參閱

參考

系統預存程序 (Transact-SQL)

Database Engine 預存程序 (Transact-SQL)

CREATE RULE (Transact-SQL)

DROP RULE (Transact-SQL)

sp_unbindrule (Transact-SQL)

系統預存程序 (Transact-SQL)