| MSDE FunClub |
|
最終更新日 : 2000/07/22 |
|
Microsoft Data Engine FunClub
|
Since 2000.07.22
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章142p 〜 145p掲載】 |
-- [更新系SQL文の基礎(例題6)EX2-06.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
--
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- ( 件処理されました)の表示を抑制する
SET NOCOUNT ON
GO
-- 既存のテーブルが存在したら、それを削除します
IF( (OBJECT_ID('TBL01') IS NOT NULL) AND
OBJECTPROPERTY( OBJECT_ID('TBL01'),'ISTABLE') = 1 )
BEGIN
DROP TABLE TBL01
END
IF( (OBJECT_ID('TBL02') IS NOT NULL) AND
OBJECTPROPERTY( OBJECT_ID('TBL02'),'ISTABLE') = 1 )
BEGIN
DROP TABLE TBL02
END
GO
-- テーブルを作成する
CREATE TABLE TBL01 (
ID INT PRIMARY KEY ,
DAT VARCHAR(40)
)
CREATE TABLE TBL02 (
ID INT PRIMARY KEY ,
DAT VARCHAR(40)
)
GO
-- データを登録します
INSERT INTO TBL01 VALUES ( 10 , 'DATA-10' )
INSERT INTO TBL01 VALUES ( 11 , 'DATA-11' )
INSERT INTO TBL01 VALUES ( 12 , 'DATA-12' )
INSERT INTO TBL01 VALUES ( 13 , 'DATA-13' )
INSERT INTO TBL01 VALUES ( 14 , 'DATA-14' )
INSERT INTO TBL02 VALUES ( 10 , '**TBL02で更新しました**' )
INSERT INTO TBL02 VALUES ( 12 , '**TBL02で更新しました**' )
INSERT INTO TBL02 VALUES ( 14 , '**TBL02で更新しました**' )
INSERT INTO TBL02 VALUES ( 21 , 'DATA-21' )
INSERT INTO TBL02 VALUES ( 23 , 'DATA-23' )
GO
PRINT ''
PRINT '[更新前]TBL01'
SELECT * FROM TBL01
GO
--TBL01のDATフィールドを更新します
UPDATE TBL01
SET TBL01.DAT = TBL01.DAT + ':' + TBL02.DAT
FROM TBL01 INNER JOIN TBL02
ON TBL01.ID = TBL02.ID
GO
PRINT '[更新後]TBL01'
SELECT * FROM TBL01
GO
-- *************************************************
-- カーソルを使う例のために、同じ状況を作ります
-- *************************************************
DELETE FROM TBL01 -- レコードの削除
DELETE FROM TBL02
INSERT INTO TBL01 VALUES ( 10 , 'DATA-10' )
INSERT INTO TBL01 VALUES ( 11 , 'DATA-11' )
INSERT INTO TBL01 VALUES ( 12 , 'DATA-12' )
INSERT INTO TBL01 VALUES ( 13 , 'DATA-13' )
INSERT INTO TBL01 VALUES ( 14 , 'DATA-14' )
INSERT INTO TBL02 VALUES ( 10 , '**カーソルを使いました**' )
INSERT INTO TBL02 VALUES ( 12 , '**カーソルを使いました**' )
INSERT INTO TBL02 VALUES ( 14 , '**カーソルを使いました**' )
INSERT INTO TBL02 VALUES ( 21 , 'DATA-21' )
INSERT INTO TBL02 VALUES ( 23 , 'DATA-23' )
GO
PRINT '[更新前]TBL01'
SELECT * FROM TBL01
GO
-- *******************************************
-- カーソルを使った次の更新は止めましょう
-- *******************************************
-- レコードの列を受け取る変数の宣言
DECLARE @ID int , @DAT varchar(40) , @DAT2 varchar(40)
-- カーソルを定義する
DECLARE My_CUR CURSOR
LOCAL SCROLL DYNAMIC OPTIMISTIC
FOR SELECT TBL01.ID , TBL01.DAT , TBL02.DAT
FROM TBL01 INNER JOIN TBL02
ON TBL01.ID = TBL02.ID
FOR UPDATE
-- カーソルを開く
OPEN My_Cur
-- 先頭レコードを取得
FETCH NEXT FROM My_Cur INTO @ID , @DAT , @DAT2
-- レコードが無くなるまでループする
WHILE( @@FETCH_STATUS = 0 )
BEGIN
-- レコードを更新する
UPDATE TBL01
SET TBL01.DAT = @DAT + ':' + @DAT2
WHERE CURRENT OF My_CUR
-- 次のレコードに移動する
FETCH NEXT FROM My_Cur INTO @ID , @DAT , @DAT2
END
-- カーソルを閉じる
CLOSE My_CUR
-- カーソルを破棄する
DEALLOCATE My_CUR
GO
PRINT '[更新後]TBL01'
SELECT * FROM TBL01
GO