Импорт/обновление данных из Excel в SQL Server

Я конвертирую базу данных из Excel на сервер MS SQL и в основном не знаю.

Файл Excel содержит заголовки столбцов Идентификатор группы, Имя, Члены, Примечания.

Таблица SQL имеет те же поля.

Когда я обновляю SQL, некоторые записи совершенно новые, поэтому их нужно добавлять, другим нужно обновить один или два столбца, в то время как большинству записей вообще ничего не нужно. До сих пор я шел ленивым путем, обрезал файл и добавлял все обратно, но как правильно?


person Deina Underhill    schedule 09.01.2013    source источник
comment
Импортируйте файл как отдельную таблицу, и вы сможете выполнять все свои обновления оттуда. В зависимости от вашей версии SQL-сервера вы можете использовать оператор MERGE. Создание вставки и заявления об обновлении не должно занять слишком много времени.   -  person twoleggedhorse    schedule 09.01.2013
comment
@twoleggedhorse Вероятно, это должен быть ответ, знаете ли, поскольку это ответ (и хороший при этом) и все такое.   -  person WhoaItsAFactorial    schedule 09.01.2013
comment
Достаточно справедливо, я сделал это ответ :)   -  person twoleggedhorse    schedule 09.01.2013


Ответы (1)


Импортируйте файл как отдельную таблицу, и вы сможете выполнять все свои обновления оттуда. В зависимости от вашей версии SQL-сервера вы можете использовать СЛИВ. Создание вставки и заявления об обновлении не должно занять слишком много времени.

Что-то вроде этого для обновления:

UPDATE o
SET    name = i.name
FROM   originaltablename o
       INNER JOIN importedexceltablename i
           ON o.GroupID = i.GroupID
WHERE  o.name <> i.name

И что-то вроде этого для вставки:

INSERT INTO originaltablename
SELECT i.*
FROM   importedexceltablename i
       LEFT JOIN originaltablename o
           ON o.GroupID = i.GroupID
WHERE  o.GroupID IS NULL

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

person twoleggedhorse    schedule 09.01.2013
comment
Спасибо много! На днях это работало нормально, но, кажется, сегодня по какой-то причине я продолжаю получать ** Msg 208, уровень 16, состояние 1, строка 3, недопустимое имя объекта «o». error Полный код, который я использую: USE [Boats] --select * from [dbo].[Groups] as o --SELECT * -- FROM [dbo].[Groups$] as i ------ WHERE ID is null; GO INSERT INTO o SELECT i.* FROM [dbo].[ImportGrp] i LEFT JOIN [dbo].[Groups] o ON o.ID = i.ID WHERE o.ID IS NULL PRINT 'Number of rows added is ' + CAST(@@ROWCOUNT as char(6)); - person Deina Underhill; 14.01.2013
comment
Попробуйте изменить строку INSERT INTO o так, чтобы она читалась как INSERT INTO [dbo].[Groups]. - person twoleggedhorse; 14.01.2013