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