импортировать данные из одной таблицы в другую таблицу - PullRequest
1 голос
/ 05 августа 2009

Я использую SQL Server 2008 Enterprise. Мне нужно импортировать все данные из сервера / экземпляра «Server Foo», базы данных «Foo» и таблицы «Foo», в целевой сервер / экземпляр «Server Goo», базу данных «Goo» и таблицу «Goo». Table Foo и Table Goo имеют одинаковую схему. Если для таблицы Goo существует одна и та же строка, я хочу сохранить исходные данные в Goo и ввести строку импорта в Foo (у таблицы Foo и таблицы Goo есть столбец типа uniqueidentifier с именем CustomerID, который действует как первичный ключ и кластерный индекс), просто как игнорировать дубликат ключа.

Я ищу простые и надежные способы написания T-SQL для решения проблемы экспорта / импорта данных. Какие-либо эталонные образцы?

РЕДАКТИРОВАТЬ 1:

Я пробовал приведенное ниже решение с использованием MERGE, но столкнулся со следующей ошибкой в ​​SQL Server Management Studio. Есть идеи что не так?

Дополнительная информация:

LabTest1 \ SQLServer2008 => Сервер \ Имя экземпляра; OrderDB => имя БД; dbo => имя схемы; Заказы => Название таблицы.

merge into [dbo].[Orders] as Target
using "LabTest1\SQLServer2008.OrderDB.dbo.Orders" as source
on target.Hash = source.Hash
when not matched then
INSERT     ([Hash]
           ,[Order]
           ,[Name]
           ,[CreationTime]
           ,[Description])
     VALUES
     (
     source.[Hash], source.[Order], source.[Name], source.[CreationTime], source.[Description]
     )
when MATCHED then
;

Сообщение об ошибке:

Сообщение 102, Уровень 15, Состояние 1, Строка 16 Неверный синтаксис рядом с ';'.

спасибо заранее, George

Ответы [ 3 ]

8 голосов
/ 05 августа 2009

В SQL Server 2008 вы можете написать скрипт для своей таблицы Goo.Goo в студии SQL Server Mgmt и попросить ее также создать скрипт для вставки всех данных с помощью операторов T-SQL INSERT. Перейдите в обозреватель объектов, щелкните правой кнопкой мыши базу данных, выберите «Задачи> Создать сценарии», выберите таблицу, для которой вы хотите сгенерировать операторы вставки данных, и убедитесь, что здесь используется эта опция:

alt text

Затем их можно запустить на другом сервере, чтобы вставить содержимое таблицы. В этом случае, однако, вам придется самостоятельно вставлять возможные существующие строки.

С другой стороны, если оба сервера находятся в одной сети, вы можете просто использовать функцию «Связанный сервер» и связать исходный сервер с целевым сервером, а затем использовать инструкцию SQL Server 2008 MERGE для импорта всех данных. из таблицы исходного сервера на целевой сервер.

В обозревателе объектов перейдите в «Объекты сервера», затем «Связанные серверы», щелкните правой кнопкой мыши и «Добавить новый связанный сервер», чтобы установить соединение между двумя серверами:

alt text

Как только серверы связаны, простая инструкция MERGE (впервые в SQL Server 2008) позволит вам объединить данные из этих двух таблиц:

MERGE 
  INTO Goo.Goo as Target
  USING Foo.Foo.dbo.Foo as Source
  ON Source.ID = Target.ID
WHEN NOT MATCHED THEN
  INSERT (field1, field2, field3)
  VALUES (source.field1, source.field2, source.field3)  
WHEN MATCHED THEN
  -- do nothing
;

Подробнее о новом заявлении MERGE читайте здесь:

или в электронной документации по SQL Server 2008.

Марк

1 голос
/ 05 августа 2009

Если вы используете редакцию SQL Server для предприятий, то зачем вам усложнять свой проект с помощью необработанного кода T-SQL?

Вы можете достичь своих целей более простым и надежным способом с помощью SQL Server Integration Services (SSIS), технологии, специально разработанной для выполнения задач ETL и, конечно, включенной в ваш выпуск SQL Server. .

Предварительно созданные компоненты уже существуют для обработки данных по вашему желанию, и у вас есть дополнительный бонус, заключающийся в возможности легко включать возможности аудита и ведения журналов в ваше решение.

То, чего вы хотите достичь, может быть достигнуто с помощью чистого кодирования T-SQL, однако в этом случае вы сами усложните себе жизнь, и полученное в результате решение, скорее всего, будет громоздким и менее изящным.

0 голосов
/ 22 декабря 2011

Для меня, когда у меня была похожая проблема, я просто скопировал данные из окна вывода SQL Server Management Studio и вставил их в файл Excel, а затем импортировал данные в другую базу данных с помощью этого инструмента:

http://www.codeproject.com/KB/database/Excel2Sql.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...