2016-06-13 12 views
0

あるデータベースから2つのテーブルをエクスポートし、対応するテーブルが空でない別のデータベースにデータをインポートするという定期的な作業があります。問題のテーブルの1つに、最初のIDを参照する列があります。それらをCustomerとCustomer_Addressと呼びましょう。ここで、Customer_AddressにはCustomerテーブルのIDを参照するCust_IDという列があります。リンクテーブルのIDをインクリメントしてINSERTスクリプトを作成する(SQLサーバー)

これらのためにインポートスクリプトを作成する必要があります。これは、顧客レコードをID = max(id)+1の他の空でないDBに追加し、各行に別のテーブルへのリンクを破棄しません。 Customer_Addressテーブルも同じようにインクリメントする必要がある独自のID列を持ちます。

最初に挿入したレコードを既存の最高のIDよりも1つ高くする必要はありませんが、それが最適です。私は過去に手動でターゲットDB内の最も高いIDをチェックし、検索と置換を使用してこの番号を追加し、インポートスクリプト内の変数を管理しましたが、途中でターゲットDBにレコードが追加されると面倒です。

ExcelでソーステーブルからIDを除いたすべての列を選択してSQLラップし、IDの代わりにselect(max)を使用する方法もありますが、やはり面倒です。データと

編集:(便宜上同じ/ temdbデータベースに)送信元と送信先テーブルを作成する サンプルスクリプトはここにある:次のように http://pastebin.com/C64wFtsP

は、出力を与える必要があります:

select * from customer 
 
id Last First 
1 Johnson James 
2 Kelly Karl 
3 Lawlor Liam
select * from customer2 
 
id Last First 
1 Adams Ann 
2 Byrne Bressie 
3 Casey Charlene
select * from customeraddress 
 
id idclient street   city  county country 
1 1  65 North St. Marcoussin Jojoba Flatland 
2 2  42 South St. Marcoussin Jojoba Flatland 
3 3  12 West St.  Marcoussin Jojoba Flatland 
4 1  17 East St.  Marcoussin Jojoba Flatland 
5 1  75 Centre St. Marcoussin Jojoba Flatland 
select * from customeraddress2 
 
id idclient street   city  county country 
1 1  99 North St. Marcoussin Jojoba Flatland 
2 2  88 South St. Marcoussin Jojoba Flatland 
3 3  88 West St.  Marcoussin Jojoba Flatland 
4 1  66 East St.  Marcoussin Jojoba Flatland 
5 1  55 Centre St. Marcoussin Jojoba Flatland 

私が探している対応する宛先表へのスクリプトの両方のソーステーブル内のデータのインポートをする方法である、customeraddressにidclient間のリンクを維持しながら、そして顧客のID。あなたが先データベース内のデータをステージングできた場合

+0

あなたが失敗を自分で設定しているMAX(ID)+ 1を使用していつでも。ここには間違っていることがたくさんあります。投稿されたように、あなたの質問は完全に広すぎ、詳細が不十分です。 –

+0

明確にするにはどうすればよいですか?小さなサンプルデータベース(ソースとターゲット)を提供すれば問題ありませんか? – pickarooney

+0

http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

答えて

0

、ちょうどこの操作を行います。Destinationに

  1. ステージ両方のテーブル、すべてのフィールドを。
  2. 新しい宛先テーブルにユーザーを挿入します。
  3. あなたの顧客のための自然キー(それらもCustomer2に存在するCustomer1で個別のエンティティになりもの)を特定する必要があります。この

ノートのようなクエリを書く - のfirstName、lastNameのは、おそらくにISN顧客ベース全体ではっきりと区別される可能性は低いので最高ですが、サンプルデータにはこれがあります。

INSERT INTO customeraddress2 
SELECT 
    customer2.id, 
    staged_customeraddress1.street, 
    staged_customeraddress1.city, 
    staged_customeraddress1.county, 
    staged_customeraddress1.country 
FROM customer2 
JOIN staged_customer1 
    ON staged_customer1.firstName = customer2.firstName 
    AND staged_customer1.lastName = customer2.lastName 
JOIN staged_customeraddress1 
    ON staged_customeraddress1.idclient = staged_customer1.id 
+0

残念ながら、一意の共通識別子はありません。私はちょうど携帯番号やロイヤルティカード番号に基づいて名前にアドレスを一致させることができれば非常に簡単ですが、これらのフィールドは私が作業しているデータベースではしばしば空白です。 – pickarooney

関連する問題