Я хочу импортировать данные из одной базы данных SQL Server в другую. Обе БД имеют одинаковые определения таблиц и т. Д., Но разные данные. Первичные ключи увеличиваются автоматически, поэтому один и тот же первичный ключ будет относиться к разным данным в обеих БД.
Мне понадобятся обновленные первичные ключи из второй БД (и, очевидно, любые внешние ключи, которые на них ссылаются) при вставке в первую. Меня пока не волнует, дублируются ли данные. Есть ли способ сделать это?
Вы не сказали, какая версия. Поскольку мы говорим о SQL Server, есть несколько подходов к этому. Если вы используете SQL Server 2005/2008, самый простой способ - это, вероятно, использовать функцию импорта данных в SQL Server Management Studio. Фактически, это создает пакет SSIS, который позволяет вам вводить данные в объединенную базу данных. Это простой пакетный подход SSIS, поэтому внешние ключи могут быть проблемой.
В противном случае другой вариант - использовать bcp для экспорта данных из таблицы (таблиц), однако без ссылок на первичный / внешний ключ. Это поместит данные в текстовые файлы. На этом этапе вы можете использовать BULK INSERT для переноса данных в объединенную базу данных. Здесь есть предостережение: если столбцы, в которых находятся внешние ключи, не допускают NULL, этот подход будет проблематичным.
Третий вариант - написать сценарии самостоятельно, и это тоже довольно легко сделать. Вы можете взять вторую базу данных, если она еще не установлена на вашем SQL Server, и присоединить ее к SQL Server, где будет располагаться объединенная база данных. Подключение к связанному серверу тоже может работать, но в целом оно будет намного медленнее. Затем вы можете написать свои операторы INSERT соответствующим образом, не затрагивая поля первичного ключа. Для таблиц со ссылками на внешние ключи вы можете использовать JOIN для получения правильных значений для ссылок, если вы загружаете таблицы в правильном порядке.
Четвертый вариант - создать собственный пакет SSIS, загрузить таблицы по порядку и выполнить поиск соответственно, чтобы убедиться, что у вас есть правильные ссылочные значения внешнего ключа. Это немного сложнее, чем первый шаг, но он гарантирует, что вы все сделаете правильно. Кроме того, если вам придется повторить это упражнение, пакет уже будет у вас. Еще одно преимущество состоит в том, что вам не нужно создавать соединение со связанным сервером, и он будет использовать самые быстрые методы вставки в объединенную базу данных.
Хорошо, поскольку у вас есть то, что звучит в основном как непересекающиеся данные (и все равно, если у вас есть дубликаты), есть обходной путь, который я использовал в Postgres, который может быть применимо:
INSERT
операторы или что-то еще текстовое и удобное для редактирования)SERIAL
key в Postgres вы должны получить новые ключи для каждой строки)Все это основано на том, что они являются простым способом сбросить ваши данные в этом формате (или написать быстрый PHP / ASP / любой другой скрипт для генерации SQL тоже может работать ...). Также обратите внимание, что этот метод становится немного громоздким с огромными наборами данных - обычно ограничивающим фактором является то, что текстовый редактор захлебывается огромным файлом.