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




技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません