| MSDE FunClub |
|
最終更新日 : 2000/08/18 |
|
Microsoft Data Engine FunClub
|
Since 2000.08.18
|
|
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