SQL Server: копирование содержимого таблицы из одной базы данных в другую - PullRequest
0 голосов
/ 04 февраля 2010

Я хочу обновить статическую таблицу в моей локальной базе данных разработки текущими значениями с нашего сервера (доступ к которым осуществляется в другой сети / домене через VPN).Использование мастера импорта / экспорта данных было бы моим выбором, однако я обычно сталкиваюсь с одной из двух проблем:

  1. Я получаю ошибки нарушения первичного ключа, и все завершается.Это потому, что он пытается вставить строки, которые у меня уже есть.
  2. Если я установлю в мастере параметр «удалить из цели», я получу ошибки нарушения внешнего ключа, поскольку в других таблицах есть ссылки на ссылки назначения.

Мне нужен правильный набор параметров, который означает, что мастер импорта / экспорта будет обновлять существующие строки и вставлять строки, которые не существуют (на основе первичного ключа или запрашивая, какие столбцыиспользовать в качестве ключа).

Как я могу заставить эту работу?Это на SQL Server 2005 и 2008 (я уверен, что он также работал нормально на мастере SQL Server 2000 DTS).

Ответы [ 4 ]

1 голос
/ 04 февраля 2010

Мастер публикации баз данных SQL Server *1002* может экспортировать набор сценариев вставки sql для интересующей вас таблицы. Просто скажите ему экспортировать только данные, а не схему. Также будут созданы необходимые операторы отбрасывания.

1 голос
/ 04 февраля 2010

Я не уверен, что вы можете сделать это в студии управления. У меня был хороший опыт RedGate SQL Data Сравните в синхронизации баз данных, но вы должны за это заплатить.

0 голосов
/ 04 февраля 2010

Если вы отключите ограничения FK во время второго варианта - и возобновите их после финских - это будет работать.

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

0 голосов
/ 04 февраля 2010

Один из вариантов - загрузить данные в новую таблицу, а затем использовать команды, аналогичные приведенным ниже, для обновления цели:

update target set
    col1 = d.col1,
    col2 = d.col2
from downloaded d
inner join target t on d.pk = t.pk

insert into target (col1, col2, ...)
select (d.col1, d.col2, ...) from downloaded d
where d.pk not in (select pk from target)
...