エラーがトランザクションを中止すると仮定しましたが、そうではありません。テーブルt2が下のコードで作成されるのはなぜですか?エラーが発生したときにSQL Serverトランザクションが続行するのはなぜですか?
IF OBJECT_ID('dbo.t1', 'U') IS NOT NULL
DROP TABLE dbo.t1
IF OBJECT_ID('dbo.t2', 'U') IS NOT NULL
DROP TABLE dbo.t2
GO
SELECT
OBJECT_ID(N't1', N'U') AS t1_Exists,
OBJECT_ID(N't2', N'U') AS t2_Exists
GO
BEGIN TRANSACTION
CREATE TABLE t1 (id INT)
GO
CREATE TABLE t1 (id INT)--Causes an error, since t1 already exists
GO
CREATE TABLE t2 (id INT)
GO
COMMIT TRANSACTION
GO
SELECT
OBJECT_ID(N't1', N'U') AS t1_Exists,
OBJECT_ID(N't2', N'U') AS t2_Exists
実行後、テーブルt2が存在します。既にデータベースにT1 '' という名前のオブジェクトはあり
t1_Exists t2_Exists
----------- -----------
NULL NULL
メッセージ2714、レベル16、状態6、行1
:ここに出力されます。メッセージ3902、レベル16、状態1、行2
COMMIT TRANSACTION要求には、対応するBEGIN TRANSACTIONがありません。
t1_Exists t2_Exists
----------- -----------
NULL 370984223