MSDE FunClub | 最終更新日 : 2000/07/22 | |
Microsoft Data Engine FunClub |
|
|
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