2016-07-26 12 views
0

外部ソースからAccess DB(.accdb)を取得し、構造やデータを制御できません。コードを使用してデータをDBに取り込む必要があります。つまり、私はSQLを制御できます。AccessでSQLを使用するレコードを制限する

私たちの問題は、1つのテーブルに13kレコード(現在は12,997件)が含まれており、処理に時間がかかることです。ソースDBのデータを照会したいのですが、一度に定義された数のレコードのみを照会したいのです - 一度に1000としましょう。

ループ内でクエリを生成して、各ループで返されるレコードの数を更新しました。

私は、各ループで のpageSizestartPosをインクリメント
SELECT * 
FROM ( 
     SELECT Top + pageSize + sub.* 
     FROM ( 
       SELECT TOP + startPos + [Product Description Codes].* 
       FROM [Product Description Codes] 
       ORDER BY [Product Description Codes].PRODDESCRIPCODE 
     ) sub 
     ORDER BY sub.PRODDESCRIPCODE DESC 
) subOrdered 
ORDER BY subOrdered.PRODDESCRIPCODE 

:これまでのところ、作業に近づく私が見つけた唯一のものは、このようなものです。問題は、いつもが、最終的に997だけ戻ってから0を返すべきであると思うものであっても、1000行を返します。

誰もがこれを手伝ってくれますか?フィルタリングする別の列がありません。ループ内の特定のレコード数を選択し、すべてのレコードを取得して停止するまでその数を増やす方法はありますか?

+1

処理に時間がかかるということを明確にすることはできますか? 13kのレコードは何もなく、遅くなるべきではありません –

+0

今、私はすべての13kレコードを取得します。それぞれについて、私のコードはDBの既存のレコードをチェックします。既存のレコードがある場合は更新されます。既存のレコードがない場合は、現在のレコードが挿入されます。私はこれを昨日走らせ、完了までに3,437,640ミリ秒かかりました。これは約57分です。これはパフォーマンス指標の範囲外です。 – Steve

+1

あなたのコメントを見ました。うわー、それは遅いです。たぶんあなたはプロセス全体を間違っているでしょう。あなたが1つずつ操作をしているように聞こえますが、2つしかないのですか? (更新用、挿入用) –

答えて

0

PRODDESCRIPCODEがプライマリキーの場合は、選択を単純化できます。すなわち、

SELECT TOP 1000 * FROM [製品説明コード] ここでPRODDESCRIPCODE> @pcode;

と@pcodeパラメータを0(intの場合は ''、またはテキストの場合は ''など)を渡して開始します。次のループでは、受け取った最大PRODDESCRIPCODEにパラメータを設定します。

(私はMS SQLサーバがSQLを意味しているかどうか、どのようにこれをやっているのか分かりません)

+0

PRODDESCRIPCODEは実際には主キーです。私が "SQL"と言うとき、私は自分のコード(私有のフォームまたはBasic)を使ってAccessにSQL文字列を渡しているということです。私はちょっと試してみて、N + 1が問題を選ぶのを研究します。 – Steve

+0

ああ、あなたはSQL文字列を渡しています。だから、どんな言葉ですか?あなたのDBは何ですか? DBから直接行うことができますか(サーバー側プログラミング)。私は、被験者に関するもう少し詳細がはるかに良いということを意味する。 –

+0

これはLIMSBasicと呼ばれ、LabWare LIMSと呼ばれるアプリケーションでは専用です。これは、Basicと非常によく似ています(しかし同じではありません)。私はどんな詳細を提供できますか?これは私の最初の投稿です。皆さんが私を助けてくれるよう、私はできる限りのことをしたいと思います。これまでのところ皆様のご関心をお待ちしております。 – Steve

0

レコードを絶対に更新する必要がありますか、ローカルテーブルにアクセステーブル全体を挿入し、タイムスタンプフィールドでスラップし、ローカルクエリを構造化して最新のエントリを取得する余裕がありますか?上のあなたのコメントのいくつかに基づいて、それはあなたがインポートされたもののローカルレコードを保持している場合があるようには聞こえません。

SELECT PRODDESCRIPCODE, MAX(timestamp) FROM table GROUP BY PRODDESCRIPCODE

関連する問題