新建資料表時建立CHECK條件約束:
1.
使用Enterprise Manager
(1)
於結構定義畫面中完成所有欄位定義後,按工具列中的[資料表和索引屬性]按鈕,再切換至[檢查條件約束]標籤頁面。
(2)
按下[新增]按鈕以建立一個CHECK條件約束,此時於下方便允許開始定義CHECK條件約束。
(3)
承上,例如:希望存入cur_salary欄位中的薪資值要介於15,000~200,000則鍵入:cur_salary >= 15000 AND cur_salary <= 200000
又例如:希望cur_salary欄位中的薪資值務必大於hire_salary欄位中的起薪值,則鍵入:cur_salary >= hire_salary
(4)
最後按一下[存檔]按鈕來將資料表存檔。
2.
使用CREATE TABLE命令
可用下列語法:
CREATE TABLE table_name
(
column_name fata_type
[[CONSTAINT column_level_constraint_name]
CHECK [NOT FOR REPLICATION] (logical_expression)]
[,…n]
[[CONSTAINT table_level_constraint_name]
CHECK [NOT FOR REPLICATION] (logical_expression)]
[,…n]
)
可以指定欄位或資料表層次之CHECK條件約束。
範例:
新建立一個資料表,並定義一個名稱為MemberNoChk的欄位層次之CHECK條件約束,以便限制存入欄位MemberNo的整數值必須介於1~10,000之間。
/* 檔案名稱:Demo61.sql
*/
CREATE TABLE DemoTable1
(
MemberNo smallint NOT NULL
CONSTRAINT
MemberNoChk
CHECK (MemberNo
BETWEEN 1 AND 10000),
name varchar(20) NOT NULL,
address varchar(60) NOT
NULL
)
※範例二
1.
存放於Id欄位的身分證字號必須第一碼是英文字母、第二碼必須是數目字1或2、後八碼則必須介於0~9的數目字。
2.
存放於JobId欄位的員工編號必須以文字串T1C開頭,後三碼必須介於0~9的數目字。
3.
存放於sex欄位的性別必須是字母M或F。
4.
Birthday欄位係存放出生日期,但是員工必須年滿18歲。
5.
存放於Phone欄位的電話號碼必須是下列格式:
(1)
區碼可以是兩碼或三碼且必須以小括弧刮起。
(2)
如果區碼是三碼,電話號碼則必須是六碼,且前三碼與後三碼必須以連字號(-)隔開,例如:(049)912-330。
(3)
如果區碼是兩碼,電話號碼可以是七碼或八碼。當電話號碼是七碼時,前三碼與後四碼必須以連字號(-)隔開,例如:(04)452-8789;當電話號碼是八碼時,前四碼與後四碼必須以連字號(-)隔開,例如:(02)2345-6789。
6.
存放於BloodType欄位的血型資料必須是文字串A、B、AB、O、RH+或RH-其中之一。
7.
存放於Hire_Salary欄位的起薪必須介於15000~100000。
8.
存放於Cur_Salary欄位的目前薪資必須介於15000~200000。
9.
對同一位員工而言,目前薪資務必大於或等於起新。
Ans.
欲建立擁有上述CHECK條件約束的資料表,請執行如下所示的CREATE TABLE命令敘述:
/* 檔案名稱:Demo65.sql */
CREATE TABLE DemoTable5
(
Id char(10) NOT NULL
CONSTRAINT IdChk
CHECK(Id LIKE ‘[A-Z][1-2][0-9]
[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’),
JobId char(6) NOT NULL
CONSTRAINT JobIdChk
CHECK(JobId LIKE ‘T1C[0-9]
[0-9] [0-9]’),
Name varchar(20) NOT NULL,
Sex char(1) NOT NULL
CONSTRAINT SexChk
CHECK(sex IN (‘M’,’F’)),
Birthday datetime NOT NULL
CONSTRAINT AgeChk
CHECK(DATEDIFF(year,Birthday,getdate())
>= 18),
Phone char(13) NOT NULL
CONSTRAINT PhoneChk
CHECK (Phone LIKE
‘([0-9] [0-9]) [0-9] [0-9]
[0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]’
OR
Phone LIKE ‘([0-9] [0-9])
[0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]’
OR
Phone LIKE ‘([0-9] [0-9]
[0-9]) [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9]’),
Address Varchar(60) NOT NULL,
BloodType varchar(3) NOT NULL
CONSTRAINT BloodTypeChk
CHECK(BloodType IN (‘A’,’B’,’AB’,’O’,’RH+’,’RH-‘)),
Hire_Salary money NOT NULL
CONSTRAINT Hire_SalaryChk
CHECK (Hire_Salary >=
15000 AND Hire_Salary <= 100000),
Cur_Salary money NOT NULL
CONSTRAINT Cur_SalaryChk
CHECK (Cur_Salary
BETWEEN 15000 AND 200000),
CONSTRAINT SalaryChk ---------à資料表層次的CHECK條件約束
CHECK (Cur_Salary >= Hire_Salary)
)
沒有留言:
張貼留言