Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Импорт .csv файла в базу / 25 сообщений из 26, страница 1 из 2
28.08.2020, 11:36
    #39993344
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Добрый день,

Пытаюсь импортировать файл, который использует возврат каретки внутри столбца и как разделитель строк (кусок в приложении).

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

При этом Excel этот файл открывает правильно.

Что я делаю не так?

Спасибо.
...
Рейтинг: 0 / 0
28.08.2020, 11:37
    #39993345
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Вот что делает импорт:
...
Рейтинг: 0 / 0
28.08.2020, 11:41
    #39993350
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
А Excel открывает этот файл без проблем
...
Рейтинг: 0 / 0
28.08.2020, 11:42
    #39993352
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Roust_m
Что я делаю не так?

Пытаешься загрузить кривой файл.
Нельзя, чтобы внутри значения поля был перевод каретки - такой файл в принципе не импортируется.

Решение:
1. удалить все переводы строки внутри поля вручную
2. загрузить в ексель, а из него уже в SQL
...
Рейтинг: 0 / 0
28.08.2020, 11:45
    #39993354
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
А покажи еще вкладку Advanced в настройках импорта
...
Рейтинг: 0 / 0
28.08.2020, 11:47
    #39993356
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
SQL2008
А покажи еще вкладку Advanced в настройках импорта


Вот:
...
Рейтинг: 0 / 0
28.08.2020, 11:52
    #39993362
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
SQL2008
Roust_m
Что я делаю не так?

Пытаешься загрузить кривой файл.
Нельзя, чтобы внутри значения поля был перевод каретки - такой файл в принципе не импортируется.

Решение:
1. удалить все переводы строки внутри поля вручную
2. загрузить в ексель, а из него уже в SQL


Удалять вручную или загружать в эксель - не вариант: файлов слишком много.

А как все-таки эксель определяет правильный конец строки?
...
Рейтинг: 0 / 0
28.08.2020, 12:02
    #39993365
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Ищите в SSIS аналог опции FIELDQUOTE инструкции BULK INSERT
...
Рейтинг: 0 / 0
28.08.2020, 12:05
    #39993366
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Roust_m
А как все-таки эксель определяет правильный конец строки?
Наверное, если перевод строки внутри строки, которая в кавычках, он считает этот перевод частью содержимого поля, а не разделителем полей.

Ещё вам нужно посмотреть, из чего состоит файл, каким то нормальным редактором (картинка же из ворда, да?), т.к. есть и другие варианты.
...
Рейтинг: 0 / 0
28.08.2020, 12:07
    #39993368
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
invm
Ищите в SSIS аналог опции FIELDQUOTE инструкции BULK INSERT
Ещё, возможно, строки разделяются CRLF, а не LF
...
Рейтинг: 0 / 0
28.08.2020, 12:10
    #39993371
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
invm
Ищите в SSIS аналог опции FIELDQUOTE инструкции BULK INSERT

+1
...
Рейтинг: 0 / 0
28.08.2020, 12:18
    #39993377
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
invm
Ищите в SSIS аналог опции FIELDQUOTE инструкции BULK INSERT


Проще выкинуть SSIS и воспользоваться ODBC-драйвером от Excel-я.
...
Рейтинг: 0 / 0
28.08.2020, 12:19
    #39993378
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
aleks222
invm
Ищите в SSIS аналог опции FIELDQUOTE инструкции BULK INSERT


Проще выкинуть SSIS и воспользоваться ODBC-драйвером от Excel-я.

Ну а если сервер MS SQL прогрессивный - тупо и прямо BULK INSERT.
...
Рейтинг: 0 / 0
28.08.2020, 13:21
    #39993415
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
court,


Roust_m
SQL2008
пропущено...

Пытаешься загрузить кривой файл.
Нельзя, чтобы внутри значения поля был перевод каретки - такой файл в принципе не импортируется.

Решение:
1. удалить все переводы строки внутри поля вручную
2. загрузить в ексель, а из него уже в SQL


Удалять вручную или загружать в эксель - не вариант: файлов слишком много.

А как все-таки эксель определяет правильный конец строки?

Думаю, что он использует фиксированный набор полей.
А покажите (нет под рукой) список типов форматов на вкладке General
...
Рейтинг: 0 / 0
28.08.2020, 13:24
    #39993419
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
alexeyvg
Наверное, если перевод строки внутри строки, которая в кавычках, он считает этот перевод частью содержимого поля, а не разделителем полей.

Кстати да!
Тогда попробуйте задать в ограничителе текста " - двойную кавычку
...
Рейтинг: 0 / 0
28.08.2020, 13:38
    #39993426
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
SQL2008
А покажите (нет под рукой) список типов форматов на вкладке General
...
Рейтинг: 0 / 0
28.08.2020, 21:00
    #39993655
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Переводы строк всё равно нельзя импортировать. Файл сначала надо очистить, например, сделать C# скрипт предобработки переноса содержимого в новый файл, по дороге выкинуть всё лишнее. Импорт выполнить из нового файла.
...
Рейтинг: 0 / 0
30.08.2020, 06:38
    #39993839
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
SQL2008
alexeyvg
Наверное, если перевод строки внутри строки, которая в кавычках, он считает этот перевод частью содержимого поля, а не разделителем полей.

Кстати да!
Тогда попробуйте задать в ограничителе текста " - двойную кавычку


Спасибо! Столбцы выправились. Но при этом вылазит другая ошибка:
Код: sql
1.
The data conversion for column "MyColumn" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".



Я проверил, в файле максимальная длина строки для этого столбца - 300 символов. В базе этот столбец nvarchar(4000).

Что бы это могло означать?
...
Рейтинг: 0 / 0
30.08.2020, 07:12
    #39993841
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
...
Рейтинг: 0 / 0
30.08.2020, 12:37
    #39993853
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Roust_m,

Попробуйте сделать столбец nvarchar(max) и посмотрите, что туда на самом деле попадает.

Скорее всего, где-то теряется разделитель столбцов, и вся остальная строка пытается влезть в это поле, и по всей видимости не влезает.
...
Рейтинг: 0 / 0
30.08.2020, 13:28
    #39993859
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Можно просто сделать script-компонент в качестве источника, а там разбирать строки как нужно
...
Рейтинг: 0 / 0
31.08.2020, 07:32
    #39993991
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Roust_m
Я проверил, в файле максимальная длина строки для этого столбца - 300 символов. В базе этот столбец nvarchar(4000).

в "базе" !


Не в "базе" нужно смотреть, а тут 22188641 , 2-й снизу параметр
...
Рейтинг: 0 / 0
31.08.2020, 09:08
    #39994003
NORT96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Roust_m,
попробуй в Excel ctrl+f и найти символы alt+010 . Если они присутствуют то замени их на пусто и пробуй грузить.
...
Рейтинг: 0 / 0
02.09.2020, 15:58
    #39994862
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
А еще бывает символ "160" непрерывный пробел )))
...
Рейтинг: 0 / 0
02.09.2020, 16:11
    #39994870
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт .csv файла в базу
Попробуйте кодом делать...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
DECLARE @cmd       VARCHAR(MAX), 
        @filename  VARCHAR(1000), -- c:\...file.csv (относительно сервера конечно же)
        @separator CHAR(1)       = ';', -- разделитель. "= CHAR(9)" - табуляция
        @codepage  VARCHAR(10)   = 'ACP';


CREATE TABLE #TITLE(
             F VARCHAR(8000)
);

CREATE TABLE #DATA(
             F VARCHAR(8000)
);

-- заполянем заголовок:
SET @cmd = '
                BULK INSERT #TITLE
                FROM ''' + @filename + '''
                WITH
                (
                      FIELDTERMINATOR = ''' + @separator + ''',
                      ROWTERMINATOR = ''0x0a'', -- ''\n'', -- ''0x0a'', -- ''\t'' при большом размере файла выдает ошибку
                      CODEPAGE = ''' + @codepage + ''', 
                      FIRSTROW = 1, 
                      LASTROW  = 1
                ) ';
EXEC (@cmd);

-- заполянем данные:
SET @cmd = '
            BULK INSERT #DATA 
            FROM ''' + @filename + '''
            WITH
            (
                  FIELDTERMINATOR = ''' + @separator + ''',
                  ROWTERMINATOR = ''0x0a'', -- ''\n'', -- ''0x0a'', -- ''\t'' при большом размере файла выдает ошибку
                  CODEPAGE = ''' + @codepage + ''', 
                  FIRSTROW = 2
            ) ';

EXEC (@cmd);

UPDATE #TITLE
   SET F = REPLACE(F, CHAR(13), '');
UPDATE #TITLE
   SET F = REPLACE(F, CHAR(10), '');
UPDATE #TITLE
   SET F = REPLACE(F, CHAR(160), CHAR(32));



SELECT * FROM #TITLE
SELECT * FROM #DATA



Далее уже дело техники
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Импорт .csv файла в базу / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]