Мне нужно импортировать файл utf-8 csv int int sql server 2014
поскольку utf-8 не поддерживается, и лучшим решением для нас является utf-16, я преобразовал файл в utf-16 BE
в Notepad ++ rowterminator показан как CR LF
и использовал следующий запрос
BULK INSERT [test].[dbo].[csv_test]
FROM 'C:inetpubwwwroot est16052017.csv'
WITH
(
FIELDTERMINATOR = ','
,ROWTERMINATOR = '
'
,BATCHSIZE = 50000
,DATAFILETYPE = 'widechar'
,CODEPAGE = '1201'
,FIRSTROW = 2
,TABLOCK
)
Это работает только частично, поскольку кажется, что они не распознают «некоторые» терминаторы и вместо этого импортируют 51 строку импорта только 25, в последнем поле - полную предыдущую строку.
Я попытался изменить как FieldTerminator, так и RowTerminator на ', 0' и ' n 0' соответственно, а также в n 0 r 0 ', но лучший результат - с простым' n ', но, как сказано, получил только половину строки
Что я делаю неправильно?
ну, извините, это сработало. Проблема была в поле ID, которое я добавил: он создавал все, что беспорядок
но так как я буду использовать формат, который позволяет мне избегать некоторых строк .. Я перевел процедуру следующим образом:
CREATE PROCEDURE dbo.spImportCSV_test
(
@FilePath nvarchar(200)='C:inetpubwwwroot est16052017.csv',
@FirstRow nvarchar(5)='2',
@FMT nvarchar(20)='csv_test'
)
AS
BEGIN
Declare @Query nvarchar(max),
@Tablename nvarchar(100)='test.dbo.csv_test'
SET @Query = 'BULK INSERT '
+ @Tablename
+ ' FROM '''
+ @FilePath
+ ''' WITH ( FORMATFILE = ''C:inetpubwwwroot estfmt'+@FMT+'.fmt'', FIRSTROW = '+@FirstRow+')';
print @Query
EXEC (@query);
END
где csv_test.fmt:
12.0
13
1 SQLNCHAR 0 500 "," 1 RegisteredItemN Latin1_General_100_CI_AS
2 SQLNCHAR 0 500 "," 2 CountryOfDestination Latin1_General_100_CI_AS
3 SQLNCHAR 0 500 "," 3 Customer Latin1_General_100_CI_AS
4 SQLNCHAR 0 500 "," 4 Identifier Latin1_General_100_CI_AS
5 SQLNCHAR 0 500 "," 5 Freight Latin1_General_100_CI_AS
6 SQLNCHAR 0 500 "," 6 HAWB Latin1_General_100_CI_AS
7 SQLNCHAR 0 500 "," 7 MAWB Latin1_General_100_CI_AS
8 SQLNCHAR 0 500 "," 8 Name Latin1_General_100_CI_AS
9 SQLNCHAR 0 500 "," 9 Address Latin1_General_100_CI_AS
10 SQLNCHAR 0 500 "," 10 Postcode Latin1_General_100_CI_AS
11 SQLNCHAR 0 500 "," 11 City Latin1_General_100_CI_AS
12 SQLNCHAR 0 500 "," 12 Weight Latin1_General_100_CI_AS
13 SQLNCHAR 0 500 "
" 13 Connote Latin1_General_100_CI_AS
но я получаю эту ошибку:
Bulk load data conversion error (truncation) for row 2, column 1 (RegisteredItemN).
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
01SQL-сервер, UTF-16,