Дополнительные символы появляются во время массовой вставки - PullRequest
4 голосов
/ 14 декабря 2010

Я пытаюсь массово вставить первую строку из CSV-файла в таблицу только с одним столбцом.Но я получаю некоторые дополнительные символы ('n ++') в начале, как это:

n++First Column;Second Column;Third Column;Fourth Column;Fifth Columnm;Sixth Column

Содержимое файла CSV выглядит так:

First Column;Second Column;Third Column;Fourth Column;Fifth Columnm;Sixth Column

Вы можете найти файл test.csv здесь

И этот код я использую для получения данных первой строки в таблице

declare @importSQL nvarchar(2000)
declare @tempstr varchar(max)
declare @path varchar(100)  

SET @path = 'D:\test.csv'    

CREATE TABLE #tbl (line VARCHAR(max))

SET @importSQL = 
'BULK INSERT #tbl 
FROM ''' + @path + ''' 
WITH ( 
LASTROW = 1,
FIELDTERMINATOR = ''\n'',
ROWTERMINATOR = ''\n''
)' 

EXEC sp_executesql @stmt=@importSQL 

SET @tempstr = (SELECT TOP 1 RTRIM(REPLACE(Line, CHAR(9), ';')) FROM #tbl)

print @tempstr
drop table #tbl

Любая идея, откуда взялся этот дополнительный 'n ++'

Ответы [ 4 ]

4 голосов
/ 15 декабря 2010

Кажется, что файлы UTF-8 не поддерживаются SQL Server 2005 и 2008, они будут доступны только в версии 11!

https://connect.microsoft.com/SQLServer/feedback/details/370419/bulk-insert-and-bcp-does-not-recognize-codepage-65001

4 голосов
/ 17 мая 2012

Дополнительные символы вызваны кодированием.Вы можете использовать использованный блокнот, чтобы изменить формат кодировки с UTF-8 на Unicode.Это убрало 'n ++' в первой строке.

3 голосов
/ 14 декабря 2010

Это может быть Порядок следования байтов в Unicode , который выявляется.

Я предлагаю вам попробовать установить параметр DATAFILETYPE как часть вашего заявления.Более подробную информацию смотрите в документации MSDN: http://msdn.microsoft.com/en-us/library/aa173832%28SQL.80%29.aspx

1 голос
/ 07 апреля 2014

К сожалению, старые версии SQL Server не поддерживают utf-8.Добавьте параметр кодовой страницы в метод массовой вставки.В вашем вопросе, пожалуйста, измените свой код как существующий.

SET @importSQL = 
'BULK INSERT #tbl 
    FROM ''' + @path + ''' 
    WITH ( LASTROW = 1, 
           FIELDTERMINATOR = ''\n'', 
           ROWTERMINATOR = ''\n'' , 
           CODEPAGE=''65001'')'

Обратите внимание, что ваш файл должен быть в формате utf-8.Но проблема в том, что если вы обновите свой сервер с 2005 до 2008 года, кодовая страница 65001 (utf-8) не поддерживается, и вы получите сообщение «Кодовая страница не поддерживается»

...