2017-11-28 2 views
0

MS AccessからSQL Serverのリンクテーブルに挿入しようとしている行が約57kですが、非常に遅いです。誰かが代替のアプローチで私を助けることができますか?長い時間がかかるアクセスでSQL Serverのリンクテーブルにレコードを挿入する

task0 = "INSERT INTO dbo_WorkTable (ID, [Batch ID], [Pay Group], [Pay Group Description], [General Ledger Account], [General Ledger Cost Center], [General Ledger Department], [Work Center], [Pay Period Ending Date], Hours, Amount, Week, [Pay Type Code], [Pay Type Description], [File Number], Name, [HOURLY SALARY], [FULL TIME_PART TIME], ACTIVE_INACTIVE, [HOURLY RATE])" _ 
& "SELECT WorkTable.ID, WorkTable.[L Batch ID], WorkTable.[Pay Group], WorkTable.[Pay Group Description], WorkTable.[General Ledger Account], WorkTable.[General Ledger Cost Center], WorkTable.[General Ledger Department], WorkTable.[Work Center], WorkTable.[Pay Period Ending Date], WorkTable.Hours, WorkTable.Amount, WorkTable.Week, WorkTable.[Pay Type Code], WorkTable.[Pay Type Description], WorkTable.[File Number], WorkTable.Name, WorkTable.[HOURLY SALARY], WorkTable.[FULL TIME_PART TIME], WorkTable.ACTIVE_INACTIVE, WorkTable.[HOURLY RATE]" _ 
& " FROM WorkTable; " 

CurrentDb.Execute(task0), dbFailOnError 

ご協力いただきありがとうございます。

+0

さて、あなたは何を期待しますか?コーディングハッピーMicrosoft AccessからSQLサーバーへの57.000レコードの移動には時間がかかることがあります。私たちは魔法の代替_doを同じではありませんが、より速いコード –

+0

ADODBを使用してSQL Serverへの接続を開き、OPENDATASOURCEを使用してINSERTを行ってアクセスデータベースに戻すことができます。 [これのようなもの](http://vbcity.com/forums/t/144403.aspx)それ以外の場合は、57000個のレコードすべてを1行ずつ挿入する予定です。しばらく時間がかかります。 – JNevill

+0

@ErikvonAsmuthどうやって考えますか? 57,000レコードはあまり多くありません。ここの問題は、インサートがバルクではなくRBARインサートを実行するリンクサーバーを介して実行されていることです。編集:JNevillは正しいアイデアを持っています。 –

答えて

1

MSアクセスDoCmd.TransferTextメソッドをマクロに配置することができます。この関数は、テーブルまたはクエリをテキストファイルにダンプできます。ローカル(ソース)マシンではかなり高速に動作します。

適切なコマンドラインスイッチを使用してbcpユーティリティを呼び出すバッチファイルを作成し、SQL Serverテーブルをロードします。これは、リモート(ターゲット)SQL Serverデータベースで同等に高速に実行されます。エラーが発生したバッチのエラーログファイルを確認してください。バッチサイズオプションを使用してプロセスを調整することができます。

これは、行(RBAR)プロセスを大量の負荷プロセスに変えて行を変換します。

ジョン・マイナー

クラフティDBA

関連する問題