У меня есть 2 базы данных DB1 и DB2. Мне нужно написать запрос для копирования данных из DB2 в DB1. Обе базы данных имеют одинаковую структуру таблицы.
Например:
CREATE TABLE DB1.Group(
GroupID [int] IDENTITY(1,1) NOT NULL,
[Company] [varchar](10) NOT NULL,
[Description] [varchar](1000) NOT NULL
)
CREATE TABLE DB1.Instance(
[InstanceID] [int] IDENTITY(1,1) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[GroupID] [int] NOT NULL,
)
Я читаю данные из DB2.Group и вставляю их в DB1.Group:
Insert into DB1.Group (Company,Description)
select Company,Description from DB2.Group
Групповой идентификатор автоматически увеличивается в DB1. И это я не хочу отключать, так как это противоречит существующим данным.
Теперь, вставляя данные в DB1.Instance, мне нужно предоставить новые автоматически инкрементированные идентификаторы вставки (GroupID) таблицы DB1.Group
Insert into DB1.Instance (Description,GroupID)
select Description, GroupID from DB2.Instance
Пожалуйста, дайте мне знать, как я могу это сделать. Благодарю.
Вставьте первую таблицу с новыми ключами (оставьте пустую кнопку pk на вставке) и создайте (временный) col в таблице DB1 для старого ключа. найдите (соедините) свою вторую вставку в старом столбце ключей, чтобы получить новый fk. Когда вы закончите, удалите старый столбец и сделайте все.
Вот sql:
CREATE TABLE DB1.Group(
GroupID [int] IDENTITY(1,1) NOT NULL,
[Company] [varchar](10) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[old_key] [int]
)
CREATE TABLE DB1.Instance(
[InstanceID] [int] IDENTITY(1,1) NOT NULL,
[Description] [varchar](1000) NOT NULL,
[GroupID] [int] NOT NULL,
)
Insert into DB1.Group (Company,Description, old_key)
select Company,Description,GroupID from DB2.Group
Insert into DB1.Instance (Description,GroupID)
select Description, DB1.Group.GroupID
from DB2.Instance join DB1.Group ON DB1.Group.old_key = DB2.Instance.GroupID
ALTER TABLE DB1.Group DROP COLUMN old_key