| MSDE FunClub |
|
最終更新日 : 2000/07/22 |
|
Microsoft Data Engine FunClub
|
Since 2000.07.22
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章188p 〜 189p掲載】 |
-- [DDL系SQL文の基礎(例題10)EX3-09.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- 主キーの設定されていないテーブルに主キーを設定する
-- 例題です
-- 主キーが設定されていない[社員]テーブルに主キーを設定
-- します
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- ( 件処理されました)のメッセージの表示を抑止します
SET NOCOUNT ON
GO
-- ****************************
-- [社員]表が存在しますか?
-- ****************************
IF( (object_id('社員') IS NULL) OR
OBJECTPROPERTY( object_id('社員') , 'ISTABLE' ) <> 1 )
BEGIN
RAISERROR('社員テーブルが存在しません',16,127)
RETURN
END
GO
-- **************************************
-- [社員]テーブルに主キーが存在しますか?
-- **************************************
-- sp_pkeys ストアドプロシージャが返す結果セットの受け取り
CREATE TABLE #RS_sp_pkeys (
TABLE_QUALIFIER sysname , --テーブル識別子の名前
TABLE_OWNER sysname , --所有者の名前
TABLE_NAME sysname , --テーブルの名前
COLUMN_NAME sysname , --列名
KEY_SEQ smallint , --列のシーケンス番号
PK_NAME sysname --主キー識別子
)
-- テーブルの主キー情報を取得する
-- ストアドプロシージャ sp_pkeysの実行
INSERT INTO #RS_sp_pkeys EXECUTE sp_pkeys '社員'
-- 主キーがすでに設定されていますか?
-- レコード数が2レコード以上のときは連結主キーです
IF EXISTS ( SELECT PK_NAME FROM #RS_sp_pkeys )
BEGIN
-- 設定されている主キーの情報を表示します
SELECT CAST( PK_NAME AS char(10) ) AS 制約名 ,
CAST( COLUMN_NAME AS char(20) ) AS 列名
FROM #RS_sp_pkeys
DROP TABLE #RS_sp_pkeys
RAISERROR('主キーがありますので、中止します',16,127)
RETURN
END
-- 一時テーブルはもう不要です。削除する
DROP TABLE #RS_sp_pkeys
PRINT '社員テーブルには、主キーがありません'
GO
-- ****************************************************
-- [社員]テーブルの[社員コード]列に主キーを設定します
-- ****************************************************
-- 念のため、社員コード列に、NOT NULL 制約を付ける
-- データ型は元と同じ型です(データ型の変更はしない)
ALTER TABLE 社員
ALTER COLUMN 社員コード int NOT NULL
-- バッチを区切ってNOT NULL をテーブルに反映させること
GO
--主キーを設定します
-- NONCLUSTERED を CLUSTERED にするとクラスタインデックス
ALTER TABLE 社員
ADD
CONSTRAINT PK_社員 PRIMARY KEY NONCLUSTERED ( 社員コード )
PRINT '[社員]テーブルの[社員コード]列に主キーを設定しました'
GO