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















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

ウィンドウを閉じる


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


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