Вы можете использовать non-xml format file, чтобы указать другой разделитель на столбец. Для значений, заключенных в двойные кавычки и ограниченных вкладками, разделитель может быть \",\"
. Вам нужно будет добавить начальный неиспользуемый столбец для захвата первой цитаты. Например, чтобы прочитать этот файл:
"row1col1","row1col2","row1col3"
"row2col1","row2col2","row2col3"
"row3col1","row3col2","row3col3"
Вы можете использовать этот формат файла:.
10.0
4
1 SQLCHAR 0 50 "\"" 0 unused ""
2 SQLCHAR 0 50 "\",\"" 1 col1 ""
3 SQLCHAR 0 50 "\",\"" 2 col2 ""
4 SQLCHAR 0 50 "\"\r\n" 3 col3 ""
(Номер на первой линии зависит от версии SQL Server Номер на второй линии число столбцов для чтения. не забудьте настроить его.)
команда bulk insert
принимает параметр formatfile = 'format_file_path'
, где можно указать формат файла. Например:
BULK INSERT YourTable
FROM 'c:\test\test.csv'
WITH (FORMATFILE = 'c:\test\test.cfmt')
Это приводит к:
select * from YourTable
-->
col1 col2 col3
row1col1 row1col2 row1col3
row2col1 row2col2 row2col3
row3col1 row3col2 row3col3
Будет ли это оставить вас с ведущей двойной кавычкой в вашем первом поле и конечной двойной кавычкой в вашем последнем поле? –
@Joe Stefanelli: вы можете захватить ведущую цитату в неиспользуемом поле и конечную цитату в терминаторе для последнего поля. Я протестировал пример, который я опубликовал, и он работает на SQL Server 2008 (который имеет BCP-версию 10.0). – Andomar
+1 Отлично сделано. Я бы не подумал использовать неиспользуемое поле для этой главной цитаты. –