| 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