2009年9月3日木曜日

【Transact-SQL】テーブルの追加と設定

--単純なテーブルを作成した後、ALTERを使って以下を行う
-- ・プライマリキーの追加
--
 ・規定値(デフォルト値)制約の追加
--
 ・カラムの追加
-- ・カラムの変更

-- ・一意制約(UNIQUE)の設定
-- ・チェック制約の設定

--テーブルの追加

CREATE TABLE t_test (
id INT IDENTITY(1,1) not NULL,
data VARCHAR(50)
)

--制約の追加
--プライマリキーの設定

ALTER TABLE t_test
ADD CONSTRAINT pk_t_test_id PRIMARY KEY (id)

--規定値(デフォルト値)制約の追加
ALTER TABLE t_test
ADD CONSTRAINT df_default_data2
DEFAULT 'test test' FOR data2 --フィールドdata2の規定値は'test test'

--カラムの追加
ALTER TABLE t_test ADD data2 VARCHAR(77)

--カラムの型変更
ALTER TABLE t_test ALTER COLUMN data VARCHAR(32)

--NULL制約の設定
-- ・ NULLを許可する場合→NULL
-- ・ NULLを許可しない場合→NOT NULL
ALTER TABLE
t_test ALTER COLUMN data NOT NULL

--一意制約(UNIQUE)の設定
--テーブルにsub_idフィールドを追加し、一意制約を設定する
--フィールドの追加
ALTER TABLE t_test
ADD sub_id INT

--一意制約の設定
--既にフィールドに一意でないデータが入っている場合は実行に失敗する
ALTER TABLE t_test
ADD CONSTRAINT ix_t_test_sub_id UNIQUE (sub_id)

--チェック制約の設定
--値の範囲をチェックする制約を設定
--SMALLINTのフィールドを追加し、制約を設定する
ALTER TABLE t_test
ADD type_number SMALLINT

--数値の範囲が0~10であることを確認する制約を設定する。
--この制約を設定した状態でも、当該フィールドの値がNULLの
--データを追加できる

--NULLデータの禁止はNULL制約を別途設定する
--また、この制約はデータの追加時にのみチェックされるため
--範囲外のデータが
既にテーブル上に存在する場合でも設定できる

ALTER TABLE
t_test
ADD CONSTRAINT ck_t_test_type_number
CHECK(type_number between 0 and 10)

--チェック制約は次のSQLでON/OFFすることができる。
--チェック制約―ON (CHECK CONSTRAINT)
ALTER TABLE t_test
CHECK CONSTRAINT ck_t_test_type_number
--チェック制約―OFF(NOCHECK CONSTRAINT)
ALTER TABLE t_test
NOCHECK CONSTRAINT ck_t_test_type_number