powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Импорт .csv файла в базу
25 сообщений из 26, страница 1 из 2
Импорт .csv файла в базу
    #39993344
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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


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

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


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

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

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


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

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

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

Кстати да!
Тогда попробуйте задать в ограничителе текста " - двойную кавычку
...
Рейтинг: 0 / 0
Импорт .csv файла в базу
    #39993426
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
А покажите (нет под рукой) список типов форматов на вкладке General
...
Рейтинг: 0 / 0
Импорт .csv файла в базу
    #39993655
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переводы строк всё равно нельзя импортировать. Файл сначала надо очистить, например, сделать C# скрипт предобработки переноса содержимого в новый файл, по дороге выкинуть всё лишнее. Импорт выполнить из нового файла.
...
Рейтинг: 0 / 0
Импорт .csv файла в базу
    #39993839
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Импорт .csv файла в базу
    #39993841
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Импорт .csv файла в базу
    #39993853
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,

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

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

в "базе" !


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

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


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