2012-05-02 17 views
1

私のテストテーブルには2つの列があります。Sql Server 2008R2でトランザクションをROLLBACKできません。

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 
+0

「GO」を削除しても同じことが起こりますか? – xan

+0

BEGINとENDの間にGOキーワードを使用することはできません。 [http://stackoverflow.com/questions/1180279/when-do-i-need-to-use-begin-end-blocks-and-the-go-keyword-in-sql-server] [ 1] [1]:http://stackoverflow.com/questions/1180279/when-do-i-need-to-use-begin-end-blocks-and-the-go-keyword- in-SQL-server –

答えて

0

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

関連する問題