2010-08-19 1 views
1

Я пытаюсь загрузить Excel (2003) файл в сервере Sql 2005Excel Vs XML на Выгрузка данных

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

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

Вариант 1: (Предложил here)

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

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

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

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

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

Благодаря

+0

сторона примечание: IsNumeric * редко * правильный ответ на любой вопрос - если этот вопрос не "это значение, конвертируемое в * любой * числовой тип - мне все равно, что?". Итак, если для вас приемлемы такие значения, как 1d50 и 3.5, используйте его. –

+0

Спасибо за примечание ... Так что я должен использовать, если мне нужно проверить int, Decimal, smallint и т. Д. –

+0

Для int, например, надеюсь, вы работаете в более ограниченном домене, чем «all int значения". Предположим, вы хотите до 6 цифр, положительное число. Проверьте это с помощью выражения LIKE, например. Col LIKE '[0-9] [0-9] [0-9] [0-9] [0-9] [0-9]'. IsNumeric * будет * полезен, если вы также можете передать ему тип данных, который вы ищете, но, увы, это не так. –

ответ

0

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

Шаг 1: Я genereated в Xml файл из Excel, используя Excel макрос ,

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

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

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

К недостаткам я нашел до сих пор:

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

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

Благодарим за помощь.

1

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

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

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

1

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

Смежные вопросы