SQL Server 2005で問題が発生しています。ストアドプロシージャがPowerBuilderアプリケーションで実行され、PowerBuilderアプリケーションが別のストアドプロシージャを実行するC#DLLライブラリを呼び出します。
最初の手順では、基準に基づいてテーブルに対していくつかの削除を実行し、2番目の手順では、別のテーブルに挿入するために、そのテーブルをプライマリデータソースとして使用します。プロシージャは、選択に同じ結合テーブルのいくつかを使用しますが、変更されるのは1つのテーブルのみです。
問題は、このセットアップがデッドロックすることがあることですが、SQLServerはそれについて何もしません。DLLライブラリには、デッドロックが原因で呼び出されたプロシージャが強制終了された場合にエラーをログに記録するtry / catchステートメントがありますが、代わりにライブラリはプロシージャの終了を待機しています。私はそれを10分間放置しましたが、それでも行き詰まっています。
2番目の手順でDEADLOCK_PRIORITYLOWステートメントを使用してみました。これは、削除が完了するのを待ってから選択する必要があるためです。また、テストするためだけに、そのselectステートメントを1つのテーブルだけにペアリングしようとしましたが、それでもデッドロックが発生します。また、両方の手順でデッドロックをキャッチするために、BEGINTRANSACTIONでTRY/ CATCHブロックを使用しようとしましたが、それも役に立ちませんでした。
トランザクションがブロックされている場合にSQLServerにトランザクションを強制終了させる方法はありますか?DLLでエラーを処理することはできますが、SQL Serverがエラーを返さず、そこに座っているだけでは、何もできません。ありがとう!