私はこの問題に数日を費やし、主要な調査と多くの試行錯誤を試みて解決策を見つけました。ここに私が持っているものと、私が仕事をするために必要なものがあります:
- TRUNCATE TABLE テーブル名 (30,000 レコード) を呼び出す SQL Server 2008 の Sproc
- MS Access (2010) クライアント
- SQLCMD ユーティリティを使用してストアド プロシージャを呼び出すバッチ ファイル
Access クライアント内で、vba/Shell() メソッドを使用してバッチ ファイルを呼び出しています。次に、バッチ ファイルは SQLCMD を使用して SQL Server に接続し、SPROC を呼び出します。
マシンから直接バッチ ファイルをクリックすると、最大 2 秒で完璧に動作します。Shell() メソッドを使用して Access 内からバッチ ファイルを実行すると、SPROC の TRUNCATE が TRUNCATE ではなく DELETE として扱われているようです。数分間アイドル状態になり、タイムアウトになり、レコードが削除されません。
数千レコードしかないテーブルで同じことをすると、約 5 秒で成功します。
「Access をクライアントとして使用しないでください」ということはわかっています。このアプリは非 IT 部門から継承したため、機能させる必要があり、再構築する資金がありません。
ここには何年も投稿していないので、プロトコルに従っていることを願っています。
事前に潜在的な解決策をありがとう、