MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/10/23
Microsoft Data Engine FunClub
Since 2000.10.23
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻)
【第18章357p 〜 359p掲載】

-- [SQL18_01.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   (1)作業用テーブルにレコードを吸い上げる
--   (2)主キーが重複しないものはそのまま登録する
--   (3)主キーが重複するものは、読み込んだレコードに更新する
-- 以上の処理を行ないます
--

-- ( 件処理されました)のメッセージの表示を抑止します
    SET NOCOUNT ON
GO

--****************************************
--         【作業用テーブルの作成】
--  SQLスクリプト生成によって得られたもの
--****************************************
    USE tempdb  --ローカル一時作業用テーブルの存在検査のため
                --OBJECTPROPERTYはカレントDBの検査
    IF( (object_id('tempdb..#TMP_社員') IS NOT NULL ) AND
        OBJECTPROPERTY(object_id('tempdb..#TMP_社員'),'IsTable') = 1 )
      BEGIN
              DROP TABLE #TMP_社員
      END
GO
   USE MySampleTest  --接続先DB
GO
    CREATE TABLE #TMP_社員 (
        [社員コード] [int] NOT NULL  PRIMARY KEY ,
        [フリガナ] [varchar] (80) NULL ,
        [氏名] [varchar] (40) NULL ,
        [在籍支社] [varchar] (20) NULL ,
        [部署名] [varchar] (30) NULL ,
        [誕生日] [datetime] NULL ,
        [入社日] [datetime] NULL ,
        [自宅郵便番号] [varchar] (10) NULL ,
        [自宅都道府県] [varchar] (40) NULL ,
        [自宅住所1] [varchar] (60) NULL ,
        [自宅住所2] [varchar] (60) NULL ,
        [自宅電話番号] [varchar] (24) NULL ,
        [内線] [varchar] (4) NULL ,
        [写真] [image] NULL ,
        [プロフィール] [text] NULL 
    )
GO

--****************************************
--     【作業用テーブルに吸い上げる】
--  ファイルのパス文字列は、サーバー基準
--****************************************
    BULK INSERT #TMP_社員        --挿入先テーブル名
       FROM 'd:\test\社員.tbl'   --サーバー基準のパス
       WITH (
         DATAFILETYPE = 'native' --内部形式
       )
GO

--****************************************
--        【新規レコードの挿入処理】
-- 主キーが一致しないレコードはそのまま挿入
--****************************************
    INSERT INTO 社員COPY 
      SELECT * FROM #TMP_社員
         WHERE( 
            #TMP_社員.社員コード
             IN (
                SELECT #TMP_社員.社員コード FROM #TMP_社員
                  LEFT OUTER JOIN 社員COPY 
                    ON #TMP_社員.社員コード = 社員COPY.社員コード
                        WHERE( 社員COPY.社員コード IS NULL )
             )
         )
GO

--****************************************
--        【レコードの更新処理】
-- 主キーが一致したレコードは読み込んだ値に更新
-- 主キー以外のすべての列の値を更新する
--****************************************
    UPDATE  社員COPY
        SET フリガナ = #TMP_社員.フリガナ , 
              氏名   = #TMP_社員.氏名     ,
            在籍支社 = #TMP_社員.在籍支社 ,
             部署名  = #TMP_社員.部署名   ,
             誕生日  = #TMP_社員.誕生日   ,
             入社日  = #TMP_社員.入社日   ,
        自宅郵便番号 = #TMP_社員.自宅郵便番号 ,
        自宅都道府県 = #TMP_社員.自宅都道府県 ,
        自宅住所1    = #TMP_社員.自宅住所1 ,
        自宅住所2    = #TMP_社員.自宅住所2 ,
        自宅電話番号 = #TMP_社員.自宅電話番号 ,
        内線         = #TMP_社員.内線 ,
        写真         = #TMP_社員.写真 ,
       プロフィール  = #TMP_社員.プロフィール
   FROM  社員COPY INNER JOIN #TMP_社員
    ON 社員COPY.社員コード = #TMP_社員.社員コード
GO

--ローカル一時テーブルを削除する
    DROP TABLE #TMP_社員
GO
技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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