MSDE FunClub | 最終更新日 : 2000/07/22 | |
Microsoft Data Engine FunClub |
|
|
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