2012-05-31 2 views
2

В настоящее время у нас есть обычный RUNS DAILY и импортирует десятки текстовых файлов в foxpro. Я работаю над преобразованием этого в TSQL. Я работаю с командой BULK INSERT.T-SQL: BULK INSERT не дает полезной информации. ОШИБКА

Я создал команду sql и файл XML для каждого из десятков плоских файлов - по одному для каждого формата.

Для каждого файла, я взываю перевод, такие как это из командной строки:

sqlcmd -d MYDB -i Import_FILEA.sql -o Output_FILEA.txt 

Он хорошо работает (если он работает). Проблема в том, что данные поступают от источника, который не проверяет данные до их отправки. Я не виню их; Я знаю, как это может случиться. Но теперь я нахожусь на месте.

My SQL скрипт выглядит следующим образом:

SET LANGUAGE us_english; 
GO 
SET DATEFORMAT ymd; 
GO 
DELETE FROM [MyDB].[dbo].[FILEA]; 
GO 
BULK INSERT 
    [MyDB].[dbo].[FILEA] 
    FROM 'C:\Documents and Settings\somewhere\FILEA.DAT' 
    WITH 
    (
    DATAFILETYPE ='CHAR', 
    FORMATFILE='C:\Documents and Settings\somewhere\translate_FILEA.xml', 
    ERRORFILE ='C:\Documents and Settings\somewhere\ERR_FILEA.TXT', 
    LASTROW = 400000 
) 
GO 

LASTROW аргумент только для целей отладки. Проблема в том, что когда эта вещь терпит неудачу, она полностью терпит неудачу и не сообщает мне строку или поле, вызывающее проблему. Он не создает никакого файла ошибки - или если он это делает, он вырывает его вскоре после. (Я вижу, что файл создается, а затем он исчезает - самая суровая вещь.)

Меня так раздражает то, что я соблазн написать скрипт perl или, возможно, какую-то скомпилированную vba с регулярным выражением, чтобы проверить очень немногие поля, которые не являются полями символов. Это мелочь, но это лишний раз - и я беспокоюсь о том, что следующий парень будет ее поддерживать. (Я не думаю, что любой из других ребят может программироваться в perl или знаком с regexp в .net). Кроме того, в документации MSDN кажется, что bulk insert должен сообщить о проблеме в этом файле ошибки.

Любые идеи? Это известная проблема? Есть ли какой-то параметр, который мне не хватает? Есть ли другой способ? Или внешний контроль формата данных правильный путь?

ответ

0

Я не получил файлы ошибок, которые будут полезны для меня. У меня есть два решения проблемы:

(A) Создайте и запустите скрипт perl для анализа и проверки полей данных каждого плоского файла перед запуском импорта.

(B) Прочитайте все как текстовые поля, но у вас есть дополнительные поля для правильного типа данных, которые устанавливаются через команду UPDATE SET после каждого BULK INSERT.

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