MSDE FunClub | 最終更新日 : 2000/08/18 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | ||
【第7章444p 〜 446p掲載】 |
-- [SQL07_08.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、複数のテーブルを組み合わせたビュー表的なものに -- カーソルを設定する例です -- 更新作業は、1個のテーブル側に限定されます -- -- カレントデータベースを MySampleTest にする USE MySampleTest GO -- (件処理されました)のメッセージを抑止する SET NOCOUNT ON GO -- ******************************************************* -- [見本テーブルの作成] -- テーブルを削除するときは、多側のテーブルから削除します -- ******************************************************* -- 多側の既存テーブルが存在したら削除します IF( (object_id('T_多側') IS NOT NULL ) AND OBJECTPROPERTY( object_id('T_多側'),'ISTABLE') = 1 ) BEGIN PRINT 'T_多側 テーブルが存在したので削除しました' DROP TABLE T_多側 END GO -- 主キー側(1側)の既存テーブルが存在したら削除します IF( (object_id('T_主側') IS NOT NULL ) AND OBJECTPROPERTY( object_id('T_主側'),'ISTABLE') = 1 ) BEGIN PRINT 'T_主側 テーブルが存在したので削除しました' DROP TABLE T_主側 END GO -- ************************************** -- 主キー側(1側)テーブルを作成する -- ************************************** CREATE TABLE T_主側 ( ID char(4) CONSTRAINT PK_T_主側 PRIMARY KEY , DATA varchar(20) ) -- ************************************** -- 参照側(多側)テーブルを作成する -- ************************************** CREATE TABLE T_多側 ( ID2 char(4) CONSTRAINT PK_T_多側 PRIMARY KEY , ID char(4) , DAT2 varchar(20) -- 参照関係を定義する CONSTRAINT REF1 FOREIGN KEY( ID ) REFERENCES T_主側( ID ) ) -- 外部キーにインデックスを設定する CREATE INDEX IDX_T_多側_ID ON T_多側 ( ID ) GO --**************************************** -- 主キー側にレコードを登録する --**************************************** INSERT INTO T_主側 VALUES( '1' , '001' ) INSERT INTO T_主側 VALUES( '2' , '002' ) INSERT INTO T_主側 VALUES( '3' , '003' ) INSERT INTO T_主側 VALUES( '4' , '004' ) INSERT INTO T_主側 VALUES( '5' , '005' ) GO --**************************************** -- 多側にレコードを登録する --**************************************** INSERT INTO T_多側 VALUES( '1' , '1' , '001' ) INSERT INTO T_多側 VALUES( '2' , '1' , '001' ) INSERT INTO T_多側 VALUES( '3' , '2' , '002' ) INSERT INTO T_多側 VALUES( '4' , '2' , '002' ) INSERT INTO T_多側 VALUES( '5' , '3' , '003' ) GO --**************************************** -- カーソルの定義 --**************************************** DECLARE @ID char(4) , @ID2 char(4) DECLARE My_cur CURSOR LOCAL SCROLL KEYSET OPTIMISTIC TYPE_WARNING FOR SELECT T_主側.ID , T_多側.ID2 FROM T_主側 INNER JOIN T_多側 ON T_主側.ID = T_多側.ID ORDER BY T_主側.ID FOR UPDATE --修正前 PRINT '***修正前***' SELECT * FROM T_多側 --カーソルを開く OPEN My_cur --先頭 FETCH NEXT FROM My_cur INTO @ID,@ID2 --多側テーブルの修正 WHILE( @@FETCH_STATUS = 0 ) BEGIN UPDATE T_多側 SET ID = '5' , DAT2 = '005' WHERE CURRENT OF My_cur --次のレコード FETCH NEXT FROM My_cur INTO @ID,@ID2 END CLOSE My_cur DEALLOCATE My_cur GO --修正後 PRINT '***修正後***' SELECT * FROM T_多側 GO