Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 При импорте из txt возвращается NULL вместо больших чисел  [new]
Fuelfire
Member

Откуда: г. Королёв
Сообщений: 153
Доброго времени суток.
Делаю импорт данных из текстовых файлов во временную таблицу MS SQL Server 2000.
Для этого использую schema.ini, в котором есть описание файла

[acc_ost.txt]
ColNameHeader=false
Format=Delimited(#)
MaxScanRows=0
TextDelimiter = "
CharacterSet=OEM
, а также OPENROWSET.
Пример файла:

"01.08.2012"#"XXXXXXXX"#"номер"#"комментарий"#312#"комментарий1"#"номер1"#"тип"#"название"#"эмитент"#50#"643"#"43"#"070.4"#"краткое название"#"тип"#""#"10.07.2012"#"м/х"
Работало все нормально вроде. Но заметил, что строки с большими числами в столбце F5 (больше трёх ярдов, например 2153046098) загружаются неправильно: вместо числа возвращается NULL.
Пошарил чужие топики на эту тему, что-то не могу найти ответ...
Данные импортирую формируя динамически запрос и исполняя через exec.
Проблемный селект упрощенно выглядит следующим образом:
SELECT ..., CONVERT(decimal,txt.F5) AS summa FROM ((OPENROWSET('MSDASQL', 
	 'Driver={Microsoft Text Driver (*.txt; *.csv)};FIELDTERMINATOR=#
	 ;DefaultDir=\\сервер\путь', 
	 'SELECT * FROM [acc_ost.txt]') txt INNER JOIN .......)
	INNER JOIN ... )
	INNER JOIN  ...
WHERE ...

До insert'а данных в таблицу селект возвращает в случае огромных чисел NULL. Если даже указать просто txt.* то вместо больших чисел будут опять-таки null.
В чем может быть дело?
9 авг 12, 19:15    [12990050]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Fuelfire
Member

Откуда: г. Королёв
Сообщений: 153
выделил одну из проблемных строк в отдельный файл и взял в кавычки значение в пятом столбце. Селект вернул правильное значение суммы. Вернул в тестовом файле всё в первоначальный вид (убрал кавычки) - тоже всё хорошо. Заменил тестовый файл рабочим - и опять NULL'ы... Файл делается мной написанной прогой уже не первый год.
9 авг 12, 19:38    [12990121]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
Fuelfire,

Какого типа получается поле F5? Если int, то числа больше 2147483647 в него не поместятся.
9 авг 12, 21:21    [12990373]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Fuelfire
Member

Откуда: г. Королёв
Сообщений: 153
Serg_77m,
файл текстовый.
видимо сам драйвер видит это поле как Integer, хотя в столбце F5 есть и несколько дробных чисел: .0042604937, 17.54 и т.д.
Всего дробных 6 строк из почти 85000 и эти строки не попадают в первые восемь.
10 авг 12, 09:00    [12991433]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Читатель неместный
Guest
Может там формат полей для загрузки можно задавать?
На крайний случай...в начало файла перед загрузкой добавлять строку с максимальным "форматом" чтобы загрузчик не ошибался и после загрузки это запись удалять.
...никогда конешно этим не занимался)
10 авг 12, 09:13    [12991468]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Fuelfire
Member

Откуда: г. Королёв
Сообщений: 153
Читатель неместный,
Это вряд ли поможет. Ведь в схеме указано MaxScanRows=0, то есть сканируется весь файл для определения типа столбца, и 6 строк с дробными значениями в поле F5 явно не целочисленные..
Налету через convert и cast тоже не преобразует..
10 авг 12, 09:36    [12991575]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
да задайте типы полей сразу,
вот пример
[acc_ost.txt]
ColNameHeader=false
Format=Delimited(#)
MaxScanRows=0
TextDelimiter = "
CharacterSet=OEM
col1=F1 Date
col2=F2 text
col3=F3 text
col4=F4 text
col5=F5 text
col6=F6 text
col7=F7 text
col8=F8 text
col9=F9 text
col10=F10 text
col11=F11 text
col12=F12 text
col13=F13 text
col14=F14 text
col15=F15 text
col16=F16 text
col17=F17 text
col18=F18 text


для F5 указал тип Long - не прокатило, поэтому сделал типа Text, а потом можно и конвертить
поправьте в файле типы полей, чтобы не мучатся
все описание файла
10 авг 12, 09:36    [12991578]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
Fuelfire
Читатель неместный,
Это вряд ли поможет. Ведь в схеме указано MaxScanRows=0, то есть сканируется весь файл для определения типа столбца, и 6 строк с дробными значениями в поле F5 явно не целочисленные..
Налету через convert и cast тоже не преобразует..


поможет, смотрите мой предыдущий пост
10 авг 12, 09:39    [12991592]     Ответить | Цитировать Сообщить модератору
 Re: При импорте из txt возвращается NULL вместо больших чисел  [new]
Fuelfire
Member

Откуда: г. Королёв
Сообщений: 153
HandKot,
спасибо, описал поля - данные загрузились правильно. Хотел еще вчера описать поля в схеме, да смутило меня указание width в описании и подумал, что описание полей подходит только для файлов с fixed-length столбцами.
Еще раз огромнейшее - выручили.
10 авг 12, 10:07    [12991783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить