このようにテーブルデータをテキストファイルにダンプするプロシージャを作成しました(関連する変数が宣言されていると仮定します)。
SET @sql = '"SELECT * FROM ##OutputData"'
SET @cmdline = 'bcp '+ @sql +' queryout '+@OutputPath+'\outputFile.csv -c -t -T -S' + @@ServerName
EXEC master..xp_cmdshell @cmdline
この手順は、SQL Server内から実行した場合は正常に機能しますが、JavaのJDBCから呼び出された場合は機能しません。
アクティビティモニターを見ると、クエリ"SELECT * FROM ##OutputData"
を実行しているトランザクションが、プロシージャを実行しているトランザクションによってブロックされていることがわかります。プロセスを効果的にデッドロックします。
私はコードをいじってみましたが、なぜこれが起こるのかまったくわかりません。どこかに欠けているものはありますか?
助けてくれてありがとう...
編集:Quartzへの参照を代わりにJDBCに変更しました。これは、おそらくより関連性が高いためです。