1

私のテストテーブルには2つの列があります。

id         int not null  
somecolumn varchar(10))

今私のクエリを参照してください:

USE TRY
BEGIN TRANSACTION T1
INSERT INTO Test VALUES(7,'hi');
GO
INSERT INTO Test VALUES(8,'hi','ABC');
GO
PRINT @@ERROR
if @@ERROR>0
    ROLLBACK TRANSACTION T1
ELSE
    COMMIT TRANSACTION T1

2番目のクエリが間違っていることがわかっているので、トランザクションをロールバックしたいのですが、最初のクエリが挿入され、次のメッセージが表示されます。

(1 row(s) affected)  
Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.
213
4

1 に答える 1

0

Benedikt が既に述べたように、BEGIN と END の間に GO を使用することはできません。上記のトランザクションから GO を削除すると、間違った挿入ステートメントが記述されているため、ステートメントはコンパイルに失敗します。TRY..CATCH も機能しません (実行フェーズ中にエラーをキャッチしてトランザクションをロールバックしようとすると)。

于 2012-07-16T07:07:07.633 に答える