MSDE FunClub | 最終更新日 : 2000/08/21 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | ||
【第8章508p 〜 510p掲載】 |
-- [SQL08_11R.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、 -- トランザクションの直列化(SERIALIZABLE) -- を理解します -- -- カレントデータベースを MySampleTest にする USE MySampleTest GO -- (件処理されました)のメッセージを抑止する SET NOCOUNT ON GO -- トランザクションの分離レベルの設定 -- 直列化(SERIALIZABLE) モードです SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO -- ********************************************* -- テーブルからデータを読み取る -- ********************************************* DECLARE @CNT int , @TOTAL int PRINT '' SET @CNT = 0 -- トランザクション開始 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回の読み取り時にINSERTが行われる WAITFOR DELAY '00:00:15' END COMMIT TRANSACTION GO -- データ挿入側クエリが動作するので、もう一度合計を計算してみる DECLARE @TOTAL int SELECT @TOTAL = SUM(NUMBER) FROM SUM_TABLE WHERE( NUMBER BETWEEN 0 AND 100 ) RAISERROR('COMMIT後の計算 その値=%d',0,1,@TOTAL) WITH NOWAIT GO -- 標準モードに戻す SET TRANSACTION ISOLATION LEVEL READ COMMITTED GO