READ UNCOMMITTED 分離レベルを使う
新しい顧客が口座開設のために来店しました。あなたはその顧客データをシステムに登録し、次のようなスクリプトが実行され始めます。
BEGIN TRAN
INSERT INTO customers (first_name, last_name, email, phone)
VALUES ('Ann', 'Ros', '[email protected]', '555555555')
DECLARE @cust_id INT = scope_identity()
INSERT INTO accounts (account_number, customer_id, current_balance)
VALUES ('55555555555010121212', @cust_id, 150)
COMMIT TRAN
ちょうどそのとき、マーケティング担当の同僚が全顧客にメール送信を開始しました。なんと車の抽選を行うのです! 彼が実行するスクリプトは、あなたが直前に追加した顧客を含む全顧客のデータを取得します。このスクリプトは、最初の INSERT が行われた後、しかし COMMIT TRAN の前に走り始めました。
なぜそんなことが起きるのでしょうか。
この演習はコースの一部です
SQL Server におけるトランザクションとエラー処理
演習の手順
READ UNCOMMITTEDの分離レベルを設定してください。customersテーブルからfirst_name、last_name、email、phoneを選択してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Set the appropriate isolation level
___ TRANSACTION ___ LEVEL ___ ___
-- Select first_name, last_name, email and phone
SELECT
___,
___,
___,
___
FROM customers;