Ну, я думаю, вам придется определить другие критерии для создания карты, например oldPK => newPK (например: Name
поле равно?
Затем вы можете определить новый PK, который соответствует старому PK, и соответственно настроить ParentID
.
Вы также можете сделать небольшой трюк: добавить новый столбец в исходную таблицу Table1, в которой будет сохранено новое значение PK для скопированной записи. Затем вы можете легко скопировать значения таблицы 2, указав их на значение нового столбца вместо старого PK.
РЕДАКТИРОВАТЬ : Я пытаюсь предоставить пример кода того, что я имел в виду под моим маленьким трюком. Я не изменяю исходную структуру базы данных, но сейчас я использую временную таблицу.
ОК, вы можете попробовать следующее:
1) Создайте временную таблицу, в которой хранятся значения старой таблицы, плюс она получает новый PK:
CREATE TABLE #tempTable1
(
newPKField INT,
oldPKField INT,
Name VARCHAR(50)
)
2) Вставьте все значения из вашей старой таблицы во временную таблицу, вычисляя новый PK, копируя старый PK:
INSERT INTO #tempTable1
SELECT
newPKValueHere AS newPKField,
ParentID as oldPKField,
Name
FROM
Table1
3) Скопировать значения в новую таблицу
INSERT INTO NewTable1
SELECT
newPKField as ParentId,
Name
FROM
#tempTable1
4) Скопируйте значения из Таблицы2 в NewTable2
INSERT INTO NewTable2
SELECT
ChildID,
t.newPKField AS ParentId,
Foo
FROM
Table2
INNER JOIN #tempTable1 t ON t.ParentId = parentId
Это должно сделать. Обратите внимание, что это только псевдо-код T-SQL - я не проверял это на реальной базе данных! Однако оно должно приближаться к тому, что вам нужно.