2017-11-01 16 views
0

私はテーブルCustomersを持っています。私は毎日Customersテーブルからデータを抽出し、このデータのCSVを作成する方法を設計しようとしています。まだ抽出されていないレコードだけを選びたいそれが抽出されたかどうかをどのように追跡することができますか? Customersテーブルを変更してフラグを追加することはできません。SQL Serverストアドプロシージャを使用して既に抽出されていない行を抽出します

これまで、このフラグを持つステージテーブルを使用する予定です。だから、Customersテーブルからデータを取得し、これらのレコードごとにフラグを0に設定するストアドプロシージャを作成しています。このデータをステージテーブルから取得した後、SSISを使用してCSVを作成し、レコードがCSVに抽出されると、これらのレコードに対してフラグ= 1のステージングテーブルを更新します。

この問題の良い設計は何ですか?

お客様テーブル:

CustomerID | Name | RecordCreated | RecordUpdated 
+0

あなたの質問は何ですか?あなたが既にこの「抽出されたビットNOT NULL DEFAULT 0」のために良いデザインを言っているからです – Sami

答えて

0

CustomerIDと別のテーブルtblExportedEmpIDを作成します。 Customerテーブルから抽出した各顧客の顧客IDをその新しいテーブルに追加します。あなたがRecordCreatedRecordUpdatedを持って

select * from customer where customerid not in(select customerid from tblExportedEmpID) 
0

:まだ抽出されていないCustomerテーブルから顧客を抽出するために、あなたは、このクエリを使用することができます。あなたがその情報を持っているならば、テーブルごとに別々のレコードで気にするのはなぜですか?

テーブルまたは同等のものを作成する必要があります。「次回実行まで保存」データ領域。あなたのスクリプトを最初に持っているのは、現在の時間と、そのデータ領域に格納されているものを取得することです。 (あなたが再抽出する必要がある場合には、顧客の名前が変更された場合やrecordUpdated、)あなたが保存されたケースをカバーするためにexclusive upper-bound<を)したい
注意を

SELECT <list of columns and transformation> 
FROM Customers 
WHERE recordCreated >= :lastRunTime AND recordCreated < :currentRunTime 

:次に、あなたの文のクエリのすべてを持っていますタイムスタンプは、タイムスタンプを取得するメカニズムよりも解像度が低い。

最後のステップとして、スクリプトが「現在の時刻」に取得されたものを「次の実行まで保存」データ領域に保存します。

関連する問題