Подготовить и импортировать данные в существующую базу данных - PullRequest
2 голосов
/ 10 мая 2010

Я поддерживаю приложение 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

Обновление: как я наконец это сделал

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

  1. Подготовьте файл Excel: удалите ненужные столбцы, задайте правильные имена для листов и заголовков столбцов и т. Д.

  2. При SQL Server Import / Export Wizard (32-разрядная версия; в 64-разрядной версии отсутствует эта функция) загрузите каждый лист в (новую) таблицу базы данных. Мастер позаботится о (большей части) грязных деталях, включая создание соответствующей структуры БД.

  3. Войдите в базу данных с вашим любимым клиентом. Чтобы упростить кодирование SQL, я создал несколько дополнительных полей в новых таблицах.

  4. Начать транзакцию.

    BEGIN TRANSACTION;

  5. Обновление вспомогательных столбцов во вновь создаваемых таблицах:

    UPDATE excel_inspection$ SET building_id = bu.building_id FROM building bu INNER JOIN ....

  6. Вставить данные в таблицы назначения:

    INSERT INTO inspection (...) SELECT ... FROM excel_inspection$ WHERE ....

  7. Просмотрите результаты и подтвердите транзакцию, если все в порядке:

    COMMIT;

В моем случае SQL Server жаловался на конфликты сопоставления при объединении новых таблиц с существующими. Это было исправлено путем установки соответствующего сопоставления в новых таблицах, но метод отличается: в SQL Server 2005 я мог просто изменить сопоставление из диспетчера SQL Server (щелкните, щелкните, сохранить и выполнить), но в SQL Server 2008 мне пришлось установить сопоставление вручную в мастере импорта (кнопка «Редактировать SQL»).

Ответы [ 2 ]

0 голосов
/ 11 мая 2010

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

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

Если данные смоделированы правильно, вы можете импортировать их во временные таблицы, а затем вставлять / обновлять таблицы назначения, используя естественные ключи.

0 голосов
/ 10 мая 2010

1) получить файл Excel в CSV.

2) импорт файла CSV в таблицу хранения: SQL SERVER - импорт файла CSV в SQL Server с использованием групповой вставки - загрузка файла с разделителями-запятыми в SQL Server

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

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