| MSDE FunClub | 
    
         
     | 
    
         最終更新日 : 2000/08/21 | 
    | 
            Microsoft Data Engine FunClub
     | 
   
            Since 2000.08.21
     | 
 
    | 
          SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | 
    | 
          【第8章503p 〜 503p掲載】 | 
 
-- [SQL08_09R2.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--      トランザクションの反復可能読み取り(REPEATABLE READ) 
-- を理解します
--
-- カレントデータベースを MySampleTest にする
    USE MySampleTest
GO
-- (件処理されました)のメッセージを抑止する
    SET NOCOUNT ON
GO
-- トランザクションの分離レベルの設定
-- 反復可能読み取り モードです
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
-- *********************************************
--  コミット状態のテーブルからデータを読み取る
-- *********************************************
    DECLARE @CNT int , @TOTAL int
    SET @CNT = 0
    PRINT ''
 
    -- トランザクション開始
    BEGIN TRANSACTION
        WHILE( @CNT <> 3 )
           BEGIN
                 SET @CNT = @CNT + 1
                 -- 読み出し操作を実行する
                 -- コミット済みデータが読み出される
                 SELECT @TOTAL = SUM(NUMBER) FROM SUM_TABLE
                        WHERE( NUMBER BETWEEN 0 AND 100 )
                 IF( @TOTAL IS NULL )
                   BEGIN
                        RAISERROR('回数=%2d その値=NULL',0,1,@CNT) WITH NOWAIT
                   END
                 ELSE
                   BEGIN
                        RAISERROR('回数=%2d その値=%d',0,1,@CNT,@TOTAL) WITH NOWAIT
                   END
                 PRINT ''
                  -- 1回読み出したら15秒待機
                 -- 15秒に特別な意味はないが、2or3回の読み取り時にDELETEが行われる
                 WAITFOR DELAY '00:00:15'
            END
    COMMIT TRANSACTION
    RAISERROR('End. 計算結果を比較しましょう',0,1) WITH NOWAIT
GO
-- 標準モードに戻す
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
GO