SQL Server 2014 Массовая вставка utf-16 Не хватает строк

Ответов: 0

SQL Server 2014 Массовая вставка utf-16 Не хватает строк

Мне нужно импортировать файл 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,
Похожие вопросы