Excel против XML при загрузке данных - PullRequest
1 голос
/ 19 августа 2010

Я пытаюсь загрузить файл Excel (2003) на Sql server 2005.

В настоящее время мы используем SSIS для загрузки файла во временную таблицу (с определенной схемой), а затем перемещаем данные в их предполагаемое местоположение с помощью хранимой процедуры. Это дает много ошибок из-за несоответствия типов данных, и иногда нулевые значения загружаются в таблицу, даже если файл Excel содержит значения.

Теперь у меня есть следующие варианты

Вариант 1: (предлагается здесь )

Импорт данных в таблицу со всеми столбцами типа varchar (255). Затем сделайте, чтобы SP проверил тип данных каждого столбца, прежде чем переносить его в режим реального времени ... Здесь опять будет проблема с производительностью при использовании IsNumeric, len, IsDate и т. Д.

Вариант 2: (XML / XSD)

Создание XML-файла из файла XL и проверка его на соответствие предварительно определенному XSD перед импортом xml через .NET или через SSIS. Будет ли этот путь медленным по сравнению с вариантом 1? Смогу ли я проверить длину данных тоже? Смогу ли я сообщить, какие именно строки и столбцы вызвали ошибку?

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

Если есть лучший способ справиться с этим ... Пожалуйста, дайте мне знать ...

Спасибо

Ответы [ 3 ]

1 голос
/ 20 августа 2010

Я лично использую первый метод, импортируя в таблицу предварительной подготовки «без схемы», затем выполняю очистку данных, чтобы очистить ее, помещая хорошие строки в «правильную» таблицу подготовки (со схемой, соответствующей ожидаемым типам данных).столбцов) и перемещение поврежденных строк в таблицу исключений, которая соответствует таблице предварительной подготовки, с добавленным столбцом, описывающим, какая проверка завершилась неудачно (текстовое описание или, если вы действительно хотите его нормализовать, код ошибки со связаннымтаблица ошибок).

1 голос
/ 19 августа 2010

Определенно отделите проверку от импорта. Лично я бы использовал MS Access для проверки, так как это более щадящее решение, чем проблемы хранения данных в Excel, но вы можете использовать таблицу на SQL Server со всеми полями varchar (255), если хотите.

Импорт тривиален, валидация - это проект сам по себе.

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

0 голосов
/ 03 сентября 2010

Хотя предыдущие два ответа совершенно верны, то, как я это сделал, немного отличалось, поэтому я хотел предоставить способ здесь ...

Шаг 1. Я сгенерировал XML-файл из Excel, используя макрос Excel.

Шаг 2. Подтвердите то же самое с помощью предопределенного XSD в .NET (Windows App). XSD содержит всю информацию о схеме, такую ​​как тип данных и даже длину, масштаб и точность требуемых данных.

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

Шаг 3: Загрузка файла XML с использованием служб SSIS в таблицу, которая соответствует заданной схеме.

Недостатки, которые я нашел до сих пор:

  1. Процесс загрузки немного медленнее, так как требуется больше операций.
  2. Изменение DataType и длины даже одного поля занимает 3 места для загрузки. (1 в схеме, 2 в SSIS, 3 в загруженной таблице)

Я впервые пытаюсь это сделать. До сих пор все работало нормально, и я смог добиться того, чего хотел. Могут быть и другие недостатки, которые могут проявиться со временем. Я постараюсь держать этот пост в курсе, когда столкнусь с некоторыми.

Спасибо за вашу помощь.

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