MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/07/22
Microsoft Data Engine FunClub
Since 2000.07.22
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻)
【第2章129p 〜 131p掲載】

-- [更新系SQL文の基礎(例題2)EX2-02.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
-- 

-- これから操作する既定のデータベースを MySampleTest にします
    USE MySampleTest
GO

-- ( 件処理されました)の表示を抑制する
    SET NOCOUNT ON
GO


-- [運送会社]テーブルの存在チェック
    IF( ( object_id('運送会社') IS NULL ) OR 
                OBJECTPROPERTY( object_id('運送会社') , 'IsTable' ) = 0 )
       BEGIN
            PRINT '****Error!!****'
            PRINT 'AccessのNorthwindデータベースの[運送会社]テーブルを使います'
            PRINT '[運送会社]テーブルを転送してください'
            RAISERROR( '[運送会社]テーブルが見つかりません',16,127)
            RETURN
       END
GO

-- ***********************************************************
--  [運送会社]テーブルの[運送コード]にオートナンバー型が設定
--   され、IDENTITY型になります。
--   この例題では、[運送コード]に明示的な数値代入を行いますので
--   IDENTITY型があるとよくありません。
--   IDENTITY型があるときはそれを削除したいのですが、残念ながら
--   ALTER TABLEの既存列に関するIDENTITY属性の削除ができません
--   しかたないので、次のような苦肉の策を取りました
--   他に良い方法があるかなー?
-- ***********************************************************
    IF( IDENT_SEED('運送会社') IS NOT NULL )
        BEGIN
              RAISERROR('IDENTITY列が設定されています',0,1) WITH NOWAIT

              -- コピー先の一時テーブルの作成
              CREATE TABLE #TMP_運送会社(
                       運送コード int         ,
                       運送会社   varchar(40) , 
                       電話番号   varchar(24)
              )

              -- 既存テーブルのデータをコピーする
              INSERT INTO #TMP_運送会社 SELECT * FROM 運送会社

              -- 本物のテーブルを削除
              DROP TABLE 運送会社
        END
    --テーブル削除を行ったので、それを反映させるため、バッチを区切る
    --次の同じ名前のテーブル作成がうまく働かない
GO

    -- 一時テーブルが存在するときは、処理を継続させる
    IF( object_id('tempdb..#TMP_運送会社') IS NOT NULL )
      BEGIN
        RAISERROR('運送会社テーブルを作りなおします',0,1) WITH NOWAIT

        -- 本物のテーブルを作りなおす
        CREATE TABLE 運送会社(
                     運送コード int         ,
                     運送会社   varchar(40) , 
                     電話番号   varchar(24)
         )

         -- レコードを元に戻す
         INSERT INTO 運送会社 SELECT * FROM #TMP_運送会社

         -- 一時テーブルを削除する
         DROP TABLE #TMP_運送会社
      END
GO


-- 例題2の解答です
-- 1レコードの登録
    INSERT INTO 運送会社 VALUES( 10 , 'キツネウンユ' , '(03)111-1111' )
GO

-- 登録する列を明示する
    INSERT INTO 運送会社(運送コード,運送会社,電話番号)
                   VALUES( 11 , 'キツネウンユ2' , '(03)111-2222' )
GO

-- 列名を明記すれば、順番を変えても良い
    INSERT INTO 運送会社(電話番号  ,運送コード,運送会社)
                 VALUES( '(03)111-3333' , 12 , 'キツネウンユ3' )
GO


-- 列名を明記すれば、リストにない列はデフォルトとなる
-- 運送会社の列は、デフォルト値です
    INSERT INTO 運送会社(運送コード,電話番号)
                 VALUES( 14 , '(03)111-4444')
GO

-- 次のDEFALUTキーワードを使うこともできます
    INSERT INTO 運送会社(運送コード,運送会社,電話番号)
                  VALUES( 15 , DEFAULT , '(03)111-5555' )
GO


-- 次のNULLキーワードを使うこともできます
    INSERT INTO 運送会社(運送コード,運送会社,電話番号)
                 VALUES( 16 , NULL , NULL )
GO

    PRINT 'レコード挿入処理を行いました'
GO












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

ウィンドウを閉じる


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


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