2017-04-15 24 views
0

が、私はこの二つのテーブルを持つデータベースを持っている含ま:コピーのデータベースから別のデータを参照されるテーブルやアイデンティティが

[OldDb] [パー] [人]

PersonId | FirstName | LastName | Code 
2003  | 'Mike' | 'Jordan' | 2 
2357  | 'Sara' | 'Jacobs' | 1 
3481  | 'John' | 'Gates' | 5 

[OldDb]。 。。[サル] [顧客]

CustomerId | PersonId | CustomerType 
830  | 2003  | 3 
945  | 2357  | 2 
1333  | 3481  | 2 

、同じテーブルやスキーマを持つ私の新しいデータベース:。

[NEWDB] [パー]。 [人]

PersonId | FirstName | LastName | Code 

[NEWDB]。[サル]。[顧客]テーブルの人で

CustomerId | PersonId | CustomerType 

PERSONIDはアイデンティティであると私は人々をコピーするには、このコードを使用することができますが、PERSONID年代が古いとは異なりますデータベースであるため、私は顧客テーブルからデータをコピーするために以下で述べた2番目のクエリを使用できません。

INSERT INTO NewDb.per.Person 
(FirstName,LastName,Code) 
SELECT FirstName,LastName,Code 
FROM OldDb.per.Person 


INSERT INTO NewDb.Sal.Customer 
(PersonId,CustomerType) 
SELECT PersonId,CustomerType 
FROM OldDb.Sal.Customer 

ここで、両方のテーブルの新しいデータベースにデータをコピーできるようにクエリが必要です。

助けがあれば助けになるはずです。

ありがとうございます。あなたは、あなたが使用することができ、あなたの古いPersonIdを維持したい場合は

+0

あなたの古いデータは 'new db'にありますか?挿入のみ、または挿入と更新の両方を行いますか? – TriV

+0

NewDbが空で、OldDbからすべてのデータをコピーしたい。 –

+0

古い 'person id'ですか? – TriV

答えて

2

あなたの新しいデータベースは、空であるSET IDENTITY_INSERT NewDb.per.Person ON

SET IDENTITY_INSERT NewDb.per.Person ON -- then you could use personId in Insert 
INSERT INTO NewDb.per.Person 
(PersonId, FirstName,LastName,Code) 
SELECT PersonId, FirstName,LastName,Code 
FROM OldDb.per.Person 

SET IDENTITY_INSERT NewDb.per.Person OFF -- remember set it off after insert 

-- then insert new Customer without conflict 
INSERT INTO NewDb.Sal.Customer 
(PersonId,CustomerType) 
SELECT PersonId,CustomerType 
FROM OldDb.Sal.Custome 

参考リンク:SET IDENTITY_INSERT

そして、あなたは新しいPersonId自動インクリメントをしたい場合、あなたはこれを行うことができます:

----CREATE `OldPersonId` column in your NewDb.per.Person 

INSERT INTO NewDb.per.Person 
(OldPersonId, FirstName,LastName,Code) 
SELECT PersonId, FirstName,LastName,Code 
FROM OldDb.per.Person 

-- You could insert you new customer Inner join by `OldPersonId` Column 
INSERT INTO NewDb.Sal.Customer 
(PersonId,CustomerType) 
SELECT np.PersonId,CustomerType 
FROM OldDb.Sal.Customer oc 
INNER JOIN NewDb.per.Person np ON oc.PersonId = np.OldPersonId 

-----DELETE `OldPersonId` column in NewDb.per.Person 
+0

ありがとう、これは私のために働いた。私はデータベースで他の競合を処理しようとしていました。大きなデータベース、大きな問題xD。 –

+0

歓迎です.... – TriV

関連する問題