Назад | Перейти на главную страницу

Импорт SQL для обновления существующих записей?

У меня есть таблица в базе данных, содержащая стоимость товаров, которая обновляется ежемесячно. Чтобы обновить эти затраты, у нас есть кто-нибудь, кто экспортирует таблицу, произведет магию в Excel, а затем импортирует таблицу обратно в базу данных. Мы запускаем MSSQL 2005 и используем встроенную SQL Management Studio. Проблема в том, что при импорте обратно в таблицу мы должны удалить все записи перед импортом, иначе мы получим ошибки. Идеальной ситуацией было бы, чтобы импорт распознал первичные ключи и затем обновлял записи, вместо того, чтобы пытаться создать вторую запись с дубликатом ключа, что остановило бы импорт. Лучшую иллюстрацию поведения, которое мы пытаемся получить, можно найти на http://sqlmanager.net/en/products/mssql/dataimport/documentation/hs2180.html пример обновления или вставки. Возможно ли что-то подобное с помощью встроенных инструментов или нам нужно использовать стороннее программное обеспечение, чтобы это произошло?

В SQL Server 2008 вы можете поместить данные в новую таблицу и использовать оператор MERGE с вашей существующей таблицей в качестве цели, а новую таблицу в качестве источника.

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

UPDATE t SET col1 = s.col1, col2 = s.col2
FROM targetTable t
   JOIN
   newTable s
    ON s.id = t.id ;

INSERT targetTable (columnlist)
SELECT s.col1, s.col2, ...
FROM sourceTable s
   LEFT JOIN
   targetTable t
    ON s.id = t.id 
WHERE t.id IS NULL;

Имейте в виду, что вам может потребоваться включить IDENTITY_INSERT в целевой таблице, если вы также пытаетесь вставить в столбец идентификаторов.