Voici la chose, j'ai exécuté des copies identiques de mon site Web pour deux régions géographiques différentes. Le site prend désormais en charge la tarification multidevise, je souhaite donc fusionner les deux sites ensemble.
Toutes les tables que je dois fusionner sont basées sur l'identité et stupidement les tables correspondantes dans chaque copie de la base de données ont été prédéfinies au même nombre.
Existe-t-il un moyen de copier les données d'une base de données vers une autre en même temps en donnant aux données de copie de nouvelles valeurs d'identité qui se reflètent également dans les valeurs de clé étrangère des tables référencées?
c'est à dire.
Account
- Id
- Email
- FirstName
- etc
AccountImage
- Id
- Account_id
- FileName
- etc
Etc..
À moins que je manque quelque chose, votre problème ne consiste pas à déplacer les données, il traite des valeurs d'identité déjà définies. Si tel est le cas, essayez ceci.
Tant que vous êtes cohérent dans la valeur que vous ajoutez, toutes vos relations resteront les mêmes dans la base de données combinée. Donc par exemple
Vous avez une table des employés avec un identifiant max actuel de 200 000 dans la base de données A et 1 400 000 dans la base de données B. Vous décidez de déplacer les données de la base de données A vers la base de données B, car cela signifie déplacer moins de données. Lorsque vous déplacez votre table des employés, vous ajoutez 2 000 000 à la colonne Employee_Id.
USE DatabaseB
GO
SET IDENTITY_INSERT Employee ON
INSERT INTO Employee (Employee_Id, Other_Columns)
SELECT Employee_Id + 2000000, Other_Columns
FROM DatabaseA.dbo.Employee
SET IDENTITY_INSERT Employee OFF
GO
Et le dernier conseil sauvegardez tout avant de commencer au cas où vous feriez une erreur :)
SI les deux bases de données sont sur le même serveur et que vous êtes autorisé à accéder aux deux bases de données
Méthode 1:
Vous pouvez créer un script pour la base de données principale entière et l'exécuter avec un nouveau nom de base de données, puis vous aurez le même schéma et les mêmes données de la base de données principale (Possible à partir de la version SQL Server 2008).
Méthode 2:
Si vous n'avez besoin que de quelques tables avec schéma, relations et données, puis scriptez-le à partir de la base de données principale
Suivre la hiérarchie des tableaux - 1.Master table 2.Child table
Exécutez-le dans le même ordre
Méthode 3:
Si vous n'avez besoin que de schémas de tables et de données, optez pour IMPORT/EXPORT
La façon la plus simple est peut-être de simplement faire une insertion ... sélectionner, re-référencer en même temps en utilisant set identity_insert on et en ajoutant une valeur fixe à l'identité existante pour éviter tout conflit entre les ensembles de données?
Quelque chose comme ça:
set identity_insert myTable on
insert into db1.dbo.myTable
( identity_column, [column, column...] )
select identity_column+1000, [column, column...]
from db2.dbo.myTable
set identity_insert myTable off