Я поддерживаю приложение PHP с бэкэндом SQL Server. Структура БД примерно такая:
lot
===
lot_id (pk, identify)
lot_code
building
========
buildin_id (pk, identity)
lot_id (fk)
inspection
==========
inspection_id (pk, identify)
building_id (fk)
date
inspector
result
В базе данных уже есть участки и здания, и мне нужно импортировать некоторые проверки. Ключевые моменты:
- Это однократная первоначальная загрузка.
- Данные поступают в файл Excel.
- Данные Excel не знают автоматически сгенерированных идентификаторов БД: проверки должны быть связаны со зданиями через их код_Лота
Какие есть варианты загрузки данных?
date inspector result lot_code
========== =========== ======== ========
31/12/2009 John Smith Pass 987654X
28/02/2010 Bill Jones Fail 123456B
Обновление: как я наконец это сделал
В случае, если кому-то еще нужно выполнить аналогичную задачу, вот шаги, которые наконец-то потребовала загрузка данных:
Подготовьте файл Excel: удалите ненужные столбцы, задайте правильные имена для листов и заголовков столбцов и т. Д.
При SQL Server Import / Export Wizard
(32-разрядная версия; в 64-разрядной версии отсутствует эта функция) загрузите каждый лист в (новую) таблицу базы данных. Мастер позаботится о (большей части) грязных деталях, включая создание соответствующей структуры БД.
Войдите в базу данных с вашим любимым клиентом. Чтобы упростить кодирование SQL, я создал несколько дополнительных полей в новых таблицах.
Начать транзакцию.
BEGIN TRANSACTION;
Обновление вспомогательных столбцов во вновь создаваемых таблицах:
UPDATE excel_inspection$
SET building_id = bu.building_id
FROM building bu
INNER JOIN ....
Вставить данные в таблицы назначения:
INSERT INTO inspection (...)
SELECT ...
FROM excel_inspection$
WHERE ....
Просмотрите результаты и подтвердите транзакцию, если все в порядке:
COMMIT;
В моем случае SQL Server жаловался на конфликты сопоставления при объединении новых таблиц с существующими. Это было исправлено путем установки соответствующего сопоставления в новых таблицах, но метод отличается: в SQL Server 2005 я мог просто изменить сопоставление из диспетчера SQL Server (щелкните, щелкните, сохранить и выполнить), но в SQL Server 2008 мне пришлось установить сопоставление вручную в мастере импорта (кнопка «Редактировать SQL»).