以下の SQL を使用してレコードを削除し、トランザクション内の Customers テーブルに挿入しています。挿入ステートメントにエラーがある場合、エラー メッセージが表示されselect * from customers
、実行しようとすると結果セットが表示されません。そして、SSMSウィンドウを閉じると、表示されますThere are uncommitted transactions. Do you wish to commit these transactions before closing the window?
[OK] をクリックすると、テーブルから結果が表示されます。それで、トランザクションの使用中に行われるロックメカニズムはありますか。
USE CMSDB;
BEGIN TRY
BEGIN TRAN t1;
DELETE FROM Customers
print @@trancount -->prints 3 since there are three records
INSERT INTO CUSTOMERS
INSERT INTO CUSTOMERd --> error here
INSERT INTO CUSTOMERS
COMMIT TRAN t1;
END TRY
BEGIN CATCH
print 'hi' --> not printing
select @@trancount --> not resulting anything
IF @@TRANCOUNT > 0
ROLLBACK TRAN t1;
-- Error Message
DECLARE @Err nvarchar(1000)
SET @Err = ERROR_MESSAGE()
RAISERROR (@Err,16,1)
END CATCH
GO
メッセージ
(3 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Msg 208, Level 16, State 1, Line 8
Invalid object name 'dbo.Customerd'.