2009-08-05 4 views
1

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

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

EDIT 1:

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

Некоторые больше информации:

LabTest1 \ SQLServer2008 => имя сервера \ Instance; OrderDB => DB name; 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 
; 

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

Msg 102, Level 15, State 1, Line 16 Неправильный синтаксис около ';'.

заранее спасибо, Джордж

+1

Затем просто удалите КОГДА СОГЛАСЕН ТОГДА линия alltogether - вы ничего не делаете, если исходная и целевая записи совпадают, верно? Вы можете выпустить инструкцию UPDATE здесь –

ответ

8

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

alt text http://i29.tinypic.com/37wgz.jpg

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

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

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

alt text http://i28.tinypic.com/2hgtrew.jpg

После того, как серверы связаны между собой, простое утверждение 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 Books Online.

Марк

+0

Спасибо Marc, за связанный сервер, как я могу заполнить значение «Связанный сервер» в мастере New Linked Server? Я попытался ввести имя машины, но не смог. – George2

+1

Вы выбрали опцию «SQL Server» на странице «Новый связанный сервер/общий»? Просто введите имя экземпляра SQL Server, к которому вы хотите привязать. На других страницах мастера вам также может потребоваться указать учетные данные для подключения к этому экземпляру сервера. –

+0

Спасибо Marc, если имя моего исходного сервера foo, а имя экземпляра - fooinstance, я должен ввести foo \ fooinstance? Какова ваша рекомендуемая настройка для учетных данных? – George2

1

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

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

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

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

+0

Привет, Джон, URL-адрес службы SSIS не открывается. :-) – George2

+0

@George: Возможно, ваш браузер работает для меня. –

0

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

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