2017-11-10 14 views
0

エラーがfatalの場合を除いて、コードは完全に機能します。私は致命的で何を意味SMO.Server ConnectionContextのトランザクションが重大な致命的な問題を引き起こしていない

: test.sql内の内側に、そこにある:

insert into TestTable (result) values ('transaction commited') 
raiserror('tset', 17, -1) with log 

それが動作しない - トランザクションはロールバックされ、新しいものをのTestTable

が、ときにテストの内側。 SQLは致命的です。raiserror(20):

insert into TestTable (result) values ('transaction commited') 
raiserror('tset', 20, -1) with log 

トランザクションはないので、挿入がデータベースにコミットされます。

これは質問How to use transactions in SMO.Server ConnectionContextのスピンオフで、スクリプトに致命的なエラーがあり、トランザクションがまったく機能していないと考えていました。

質問:このコードで致命的なエラーを処理するにはどうすればよいですか?おかげさまで

答えて

0

問題は、致命的なエラーが接続を終了するプロセスを終了することになっていたことでした。 XACT_ABORTがONに設定されていないため、振る舞いは説明されていました(それにもかかわらず、私はむしろトランザクションがハングアップすることを期待していました)。スクリプトの最初にSET XACT_ABORT ONを設定すると、問題が修正されます。参考文献:

関連する問題