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              
















技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません