Вставить в таблицу со столбцами идентификаторов и внешних ключей - PullRequest
0 голосов
/ 29 сентября 2011

Я пытался вставить значения из одной таблицы в другую из двух разных баз данных.

Моя проблема в том, что у меня есть две таблицы с отношением, и в первой таблице также есть столбец идентификаторов.

например, таблица первая (идентификатор, имя) - таблица вторая (идентификатор, адрес)

Так что теперь обе таблицы существуют со значениями в БД, и я пытаюсь скопировать значения из этой БД в другую БД.

Поэтому, когда я вставляю значения из первого дб во второй дб, первая таблица будет вставлять значения для столбца Id сама, поэтому теперь мне нужно связать этот идентификатор со второй таблицей.

Как я могу это сделать?

ОБНОВЛЕНИЕ с использованием MSSQL сервера 2000

Ответы [ 3 ]

0 голосов
/ 29 сентября 2011

Если бы это был SQL Server 2005 или более поздняя версия, я бы предложил использовать предложение output в вашем операторе вставки для получения только что вставленных идентификаторов, но это было недоступно в SQL Server 2000.

Если ваши данные содержат какой-то столбец или серию столбцов, которые являются уникальными, кроме столбца идентификаторов, то вы можете запросить свою первую таблицу на основе этой серии столбцов, чтобы получить идентификаторы и использовать ее для заполнения своей второй таблицы.

0 голосов
/ 02 октября 2011

Если целевые таблицы были бы пустыми, вы могли бы использовать SET IDENTITY_INSERT ON - это позволило бы вставить исходные значения в столбцы идентификаторов, и вам не придется обновлять ссылочные идентификаторы. Конечно, если есть какие-либо существующие идентификаторы, которые могут перекрывать вставленные идентификаторы - это не решение.

Если имена в первых таблицах уникальны, вы можете создать отображение между новым и старым идентификаторами и выполнить обновление примерно так:

UPDATE S
SET S.id = F.id
FROM second S
INNER JOIN first_original FO ON FO.id = S.id
INNER JOIN first F ON F.name = FO.name

Если имена не являются уникальными, то исходные идентификаторы должны быть сохранены в «first» для обеспечения соответствия между старыми и новыми идентификаторами. Это может быть временный новый столбец, который может быть удален после обновления идентификаторов в "second".

Или, как сказал Рич Эндрюс, вы можете использовать @scope_identity, но в этом случае вам придется выполнять вставку одну за другой - объявить курсор на исходной таблице, вставить каждую запись, получить ее новый идентификатор и вставить ее во «вторую» таблица.

0 голосов
/ 29 сентября 2011

Вы можете использовать @scope_identity сразу после вставки в SQL Server 2000, что даст вам последний идентификатор в текущей области, но я не уверен, как это будет работать с массовой вставкой данных

http://msdn.microsoft.com/en-us/library/ms190315.aspx

...