Указание квалификатора текста при импорте CSV-файла в базу данных SQL Server

У меня есть CSV-файл с разделителями-запятыми, проблема в том, что в столбцах есть запятая.

TEXT,["pn","service"]

TEXT находится в одном столбце, а ["pn","service"] — в другом.

Как я могу использовать квалификатор текста для правильного разделения столбцов? введите здесь описание изображения


person Kaja    schedule 29.08.2018    source источник
comment
Если значение равно '["pn","service"]' (не '"pn","service"'), ваш файл не является допустимым CSV-файлом. Если символ, который вы используете для определения разделителя, может/будет находиться в значении, то вы должны использовать квалификатор текста. Без out разделитель (в вашем случае ,) внутри текстового значения будет рассматриваться как разделитель; это будет справедливо для любого имеющегося у вас средства чтения CSV. Если вы не можете изменить это, вам нужно вместо этого использовать задачу «Сценарий» в SSIS и создать все это с нуля.   -  person Larnu    schedule 29.08.2018
comment
Кроме того, если вы можете изменить значение, чтобы оно имело идентификатор кавычки, не используйте '", поскольку оно также присутствует в вашем текстовом значении. Если вы можете, я бы предложил изменить ваш разделитель. Я стараюсь использовать такие вещи, как канал (|), так как они очень редко отображают данные.   -  person Larnu    schedule 29.08.2018


Ответы (1)


Мне недавно пришлось с этим столкнуться и предложить оборачивать поля идентификатором. Я изменил макрос ниже, чтобы разделить по вертикальной черте, а не по кавычкам. Пост суперпользователя имеет больше возможностей. Ознакомьтесь с https://support.microsoft.com/en-us/help/291296/procedure-to-export-a-text-file-with-both-comma-and-quote-delimiters-i и https://superuser.com/questions/130592/how-do-you-force-excel-to-quote-all-columns-of-a-csv-file

Обновлено в соответствии с предложениями @Larnu - то, что я использую для перезаписи некоторых файлов данных перед их импортом для разовой загрузки. Просто будьте осторожны, открывая CSV в Excel напрямую... вы можете увидеть изменения значений.

Sub PipeCommaExport()
   ' Dimension all variables.
   Dim DestFile As String
   Dim FileNum As Integer
   Dim ColumnCount As Integer
   Dim RowCount As Integer

   ' Prompt user for destination file name.
   DestFile = InputBox("Enter the destination filename" _
      & Chr(10) & "(with complete path):", "Quote-Comma Exporter")

   ' Obtain next free file handle number.
   FileNum = FreeFile()

   ' Turn error checking off.
   On Error Resume Next

   ' Attempt to open destination file for output.
   Open DestFile For Output As #FileNum

   ' If an error occurs report it and end.
   If Err <> 0 Then
      MsgBox "Cannot open filename " & DestFile
      End
   End If

   ' Turn error checking on.
   On Error GoTo 0

   ' Loop for each row in selection.
   For RowCount = 1 To Selection.Rows.Count

      ' Loop for each column in selection.
      For ColumnCount = 1 To Selection.Columns.Count

         ' Write current cell's text to file with quotation marks.
         Print #FileNum, "|" & Selection.Cells(RowCount, _
            ColumnCount).Text & "|";

         ' Check if cell is in last column.
         If ColumnCount = Selection.Columns.Count Then
            ' If so, then write a blank line.
            Print #FileNum,
         Else
            ' Otherwise, write a comma.
            Print #FileNum, ",";
         End If
      ' Start next iteration of ColumnCount loop.
      Next ColumnCount
   ' Start next iteration of RowCount loop.
   Next RowCount

   ' Close destination file.
   Close #FileNum
End Sub
person TEEKAY    schedule 29.08.2018
comment
Если вы публикуете ссылки, в идеале вы должны включать действительные части. Ссылки могут стать мертвыми, однако текст, который у вас есть в вашем посте, не будет. - person Larnu; 29.08.2018