Microsoft公式ページにSQL Server 2012 における重大な変更として、
【変更点】
失敗した DML ステートメントの行数メッセージ
【内容】
SQL Server 2012 では、DML ステートメントが失敗した場合、データベース エンジンは 一貫してRowCount: 0 のTDS DONE トークンをクライアントに送信します。以前のバージ ョンの SQL Server では、失敗する DML ステートメントが TRY-CATCH ブロックに含まれ ていて、それが データベース エンジン によって自動パラメーター化されるか、または TRY-CATCH ブロックが失敗したステートメントと同じレベルにない場合、-1 という間違 った値がクライアントに送信されます。 たとえば、TRY-CATCH ブロックがストアド プロ シージャを呼び出し、そのプロシージャ内の DML ステートメントが失敗した場合、クラ イアントは -1 という間違った値を受け取ります。
この不適切な動作に依存するアプリケーションは失敗します。
といった変更点が記載されています。
この事象を再現させたいのですが、TRY-CATCHブロック内でストアドプロシージャーを呼出し、その中でINSERT時にオーバーフローするような値を挿入するようにしています。呼び出し元側のCATCH内で@@ROWCOUNTをprintで出力してみても-1ではなく0が出力されるのは何故なのでしょうか。
解る方がいらっしゃったら、ご教授下さい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/14 00:46