Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Уважаемые коллеги!
Вопрос простой. Имеется текстовый файл книг такой структуры

01759nam 22004097 4500
001 RU/RSEU/book2/2
005 20111018153652.0
010 ## d 21.00
090 ## a Полное
b КН
c рус
e НЕТ
g Монография (однотомник)
x 20071117
y 20080422
z ЧЗЮФ Зуй Галина Михайловна
....... и т.д.

создал таблицу

CREATE TABLE [dbo].[Tgt1](
[Mark] [char](3) COLLATE Cyrillic_General_CI_AS NULL,
[I2] [char](2) COLLATE Cyrillic_General_CI_AS NULL,
[sp] [char](1) COLLATE Cyrillic_General_CI_AS NULL,
[data] [varchar](500) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]

и форматный файл

9.0
4
1 SQLCHAR 0 3 " " 1 Mark Cyrillic_General_CI_AS
2 SQLCHAR 0 2 " " 2 I2 Cyrillic_General_CI_AS
3 SQLCHAR 0 1 " " 3 sp Cyrillic_General_CI_AS
4 SQLCHAR 0 500 "\r\n" 4 data Cyrillic_General_CI_AS

Запускаю утилиту

C:\Program Files\Microsoft SQL Server\90\Tools\Binn>bcp libra.dbo.tgt1 in d:\354
\book2-13-11-9576.txt -fd:\354\b.txt -Slibrary2 -UKnig -PGfh0kmrybu

Starting copy...
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
1000 rows sent to SQL Server. Total sent: 1000
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation

1169 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 62 Average : (18854.84 rows per sec.)

получаю примерно следующее

001 NULL NULL RU/RSEU/book2/4
005 NULL NULL 20111026141042.0
010 ## d 31250.00
010 ## d 16000.00
090 ## a Полное
NULL NULL NULL b КН
NULL NULL NULL c рус
NULL NULL NULL e НЕТ
NULL NULL NULL g Монография (однотомник)

т.е. урезаются как- то поля и поле sp попадает в data.
Символов (пробелов ) правильное число, программой я эту информацию
Substr выделял и загружал часами миллионы строк.
Если кто подскажет- гора с плеч!!!
Подозреваю, что я не понимаю, чему равны здесь префиксы и неправильно их задаю.
bcp им всем дает значение 2. пробовал и я два, все равно рассыпаются.
topdon
27 ноя 12, 14:13    [13536312]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мне кажется или в вашем файле разные строки имеют разный формат ?
27 ноя 12, 14:21    [13536424]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Первая строка пойдет в брак, а все остальные одинаковые.
Просто за счет неравноразмерного шрифта сдвижка.
Я наверно не понимаю, что такое префиксы.
27 ноя 12, 15:10    [13537036]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Там форум просто сдвигает строчки влево. У меня в файле все четко, b под a, и т.д.
27 ноя 12, 15:13    [13537057]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,
Поле Mark не повторяется для подполей, поэтому там пробелы, но здесь инф. хранится строго позиционно.
27 ноя 12, 15:14    [13537076]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Там форум просто сдвигает строчки влево. У меня в файле все четко, b под a, и т.д.

Используйте форматирование при оформлении сообщений
27 ноя 12, 15:15    [13537082]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Уважаемые коллеги!
Вопрос простой. Имеется текстовый файл книг такой структуры

01759nam 22004097 4500
001 RU/RSEU/book2/2
005 20111018153652.0
010 ## d 21.00
090 ## a Полное
b КН
c рус
e НЕТ
g Монография (однотомник)
x 20071117
y 20080422
z ЧЗЮФ Зуй Галина Михайловна
....... и т.д.
вот файл точно такой. Первая строчка одна на файл, я просто забыл ее убрать.
27 ноя 12, 15:20    [13537152]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
01759nam  22004097  4500
001 RU/RSEU/book2/2
005 20111018153652.0
010 ## d 21.00
090 ## a Полное
b КН
c рус
e НЕТ
g Монография (однотомник)
x 20071117
y 20080422
z ЧЗЮФ Зуй Галина Михайловна
098 ## a Учеб.-практич.пособие
b МиЛ
x ИКиМ
Вот сейчас точно. Не догадался просмотреть перед публикацией. но пробел между полями один, а на рисунке между 2 и 3 несколько.
27 ноя 12, 15:29    [13537240]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
001 RU/RSEU/book2/2
005 20111018153652.0
010 ## d 21.00
Разве это одинаковые по формату строки ?

010 ## d 21.00
090 ## a Полное
           b КН
           c рус
           e НЕТ

А это тоже одинаковые ?
27 ноя 12, 15:30    [13537247]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Первые две одинаковые потому что 2 и 3 поле пробелы. И у меня на рисунке (последнем)
это видно. Ru b 20 должны быть на уровне 2 в 010 поле.

и 2 порция то же, но только там пробелы в 1 и 2 поле. А поля b, c, e сдвинуты на рисунке,
но они точно под d и a.

Может bcp пробелы не принимает за символы? Я то в программе просто strcopy(1,3) использовал!
27 ноя 12, 16:09    [13537618]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
сделайте нормальный разделитель полей. например, символ табуляции.
27 ноя 12, 16:11    [13537645]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,

У меня ошибка. Надо Ru "и" 20 после "это видно".
27 ноя 12, 16:11    [13537649]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,
как это сделать файл выгружен специальной программой в нем миллионы строк!
Это библиотека!! Поля кроме первой строчки расположены строго позиционно,
разделитель- пробел, если поля нет- 3 пробела например.
27 ноя 12, 16:14    [13537690]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
неправильный у вас формат файла
нужно или :
1 - или нормальный разделитель полей
2 - или поля фиксированной длины
27 ноя 12, 16:16    [13537716]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Первые две одинаковые потому что 2 и 3 поле пробелы.

Ничего что _все_ строки должны быть одинаковы ?
27 ноя 12, 16:19    [13537756]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Konst_One,
Здесь все поля фиксированной длины, кроме последнего, которое описано как varchar (500),
оно до конца строки, в конце разделитель строк CRLF, но вместо некоторых мб пробелы,
тогда остальные сдвигаются. А разделитель между полями- пробел!
м. б. для поля Mark создать префикс 3 ?
27 ноя 12, 16:22    [13537797]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
м. б. для поля Mark создать префикс 3 ?

Valid prefix lengths are 0, 1, 2, 4, and 8
Вы неправильно понимаете, что есть префикс
27 ноя 12, 16:24    [13537819]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
не пойму что- то. Все строки разные, но символы в них строго позиционно расположены, включая пробелы, и разделитель полей- пробел. Длина первых трех полей одинакова у всех строк-
3, 2 и 1, т.е. 8 символов, включая пробелы- разделители. Но некоторые поля могут содержать пробелы. Последнее поле имеет разную длину до конца строки и ею заканчивается.
Если в верней строчке ## a
а в нижней b


то у нижней поле I2 пустое,Null.
27 ноя 12, 16:31    [13537892]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Все строки разные, но символы в них строго позиционно расположены,

Это как ?

090 ## a Полное
           b КН
           c рус

как должны быть разбиты эти строки ?
27 ноя 12, 16:34    [13537911]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Я же и говорю, что не понимаю префикса. Что это- длина в байтах что ли?
Может они мне и не нужны, а как грузить строго позиционно, без разделителей хотя бы,
я их потом в таблице уберу? Но чтобы пробелы при этом учитывались. Я с этой утилитой никогда не работал, а сейчас кричи надо!!
27 ноя 12, 16:36    [13537926]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Я же и говорю, что не понимаю префикса. Что это- длина в байтах что ли?

Нет. Это размер места, которое займет значение длины.

topdon
Может они мне и не нужны,

Вот именно
27 ноя 12, 16:39    [13537946]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,

090 ## a Полное
090 ## b КН
090 ## c рус

вот так хотя бы, хотя во 2 и 3 строке вместо значений 1 и 2 поля пробелы.
27 ноя 12, 16:41    [13537965]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Glory,

090 ## a Полное
090 ## b КН
090 ## c рус
вот так хотя бы, хотя во 2 и 3 строке вместо значений 1 и 2 поля пробелы.

А откуда во 2ой строке возьмутся 090 ##, если этих символов там просто нет ?
27 ноя 12, 16:43    [13537980]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
Их там и нет, я потом подставлю курсором. Там вместо них пробелы.
Это по смыслу они должны быть, но так выгружает программа.
Я с помощью Strcopy просто писал mark := ctrcopy(s,1,3); и было правильно-
получал 3 пробела. Потом заменял курсором.
27 ноя 12, 16:47    [13538019]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла Rusmark в таблицу с помощью bcp  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
есть ещё xml-файл формата для bcp

<?xml version="1.0"?>
<BCPFORMAT
       xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" xsi:type="CharFixed" LENGTH="4"/>
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="10"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="Field1" xsi:type="SQLCHAR" />
    <COLUMN SOURCE="2" NAME="Field2" xsi:type="SQLCHAR" />
  </ROW>
</BCPFORMAT>
27 ноя 12, 16:48    [13538022]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить