Непредвиденный EOF столкнулся в BCP

попытка импорта данных в Azure. Создал текстовый файл в среде Management Studio 2005. Я пробовал текстовый файл с разделителями-запятыми и вкладками.

BCP IN-c-t, - rn-U-S-P Я получаю ошибку {SQL Server Native Client 11.0]неожиданный EOF, обнаруженный в файле данных BCP

вот скрипт, который я использовал для создания файла:

 SELECT top 10  [Id]
      ,[RecordId]
      ,[PracticeId]
      ,[MonthEndId]
      ,ISNULL(CAST(InvoiceItemId AS VARCHAR(50)),'') AS InvoiceItemId
      ,[Date]
      ,[Number]
      ,[RecordTypeId]
      ,[LedgerTypeId]
      ,[TargetLedgerTypeId]
      ,ISNULL(CAST(Tax1Id as varchar(50)),'')AS Tax1Id
      ,[Tax1Exempt]
      ,[Tax1Total]
      ,[Tax1Exemption]
      ,ISNULL(CAST([Tax2Id] AS VARCHAR(50)),'') AS Tax2Id
      ,[Tax2Exempt]
      ,[Tax2Total]
      ,[Tax2Exemption]
      ,[TotalTaxable]
      ,[TotalTax]
      ,[TotalWithTax]
      ,[Unassigned]
      ,ISNULL(CAST([ReversingTypeId] AS VARCHAR(50)),'') AS ReversingTypeId
      ,[IncludeAccrualDoctor]
      ,12 AS InstanceId
  FROM <table>

Вот таблица, в которую он вставлен в

CREATE TABLE [WS].[ARFinancialRecord](
    [Id] [uniqueidentifier] NOT NULL,
    [RecordId] [uniqueidentifier] NOT NULL,
    [PracticeId] [uniqueidentifier] NOT NULL,
    [MonthEndId] [uniqueidentifier] NOT NULL,
    [InvoiceItemId] [uniqueidentifier] NULL,
    [Date] [smalldatetime] NOT NULL,
    [Number] [varchar](17) NOT NULL,
    [RecordTypeId] [tinyint] NOT NULL,
    [LedgerTypeId] [tinyint] NOT NULL,
    [TargetLedgerTypeId] [tinyint] NOT NULL,
    [Tax1Id] [uniqueidentifier] NULL,
    [Tax1Exempt] [bit] NOT NULL,
    [Tax1Total] [decimal](30, 8) NOT NULL,
    [Tax1Exemption] [decimal](30, 8) NOT NULL,
    [Tax2Id] [uniqueidentifier] NULL,
    [Tax2Exempt] [bit] NOT NULL,
    [Tax2Total] [decimal](30, 8) NOT NULL,
    [Tax2Exemption] [decimal](30, 8) NOT NULL,
    [TotalTaxable] [decimal](30, 8) NOT NULL,
    [TotalTax] [decimal](30, 8) NOT NULL,
    [TotalWithTax] [decimal](30, 8) NOT NULL,
    [Unassigned] [decimal](30, 8) NOT NULL,
    [ReversingTypeId] [tinyint] NULL,
    [IncludeAccrualDoctor] [bit] NOT NULL,
    [InstanceId] [tinyint] NOT NULL,
 CONSTRAINT [PK_ARFinancialRecord] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

есть на самом деле несколько сотен тысяч фактических records и я сделали это с другого сервера, единственное различие заключается в версии management studio.

6 ответов


Если файл разделен табуляцией, то флаг командной строки для разделителя столбцов должен быть -t\t -t,


"неожиданный EOF" обычно означает, что столбец или строка Терминатор не то, что вы ожидаете То есть ваши аргументы командной строки для них совпадают с файлом

типичные причины:

  • Unix против Windows окончания строки
  • текстовые данные, содержащие разделитель столбцов (запятая в фактических данных)
  • или смесь двух.

SSMS не должны иметь ничего общего с этим: это формат (ожидаемый vs фактический), который имеет значение


просто FYI, что я столкнулся с этой же точной ошибкой, и оказалось, что моя таблица назначения содержит один дополнительный столбец, чем файл DAT!


Я думаю, что большинство из нас предпочитают реальные примеры, чем синтаксические подсказки, поэтому вот что я сделал:

ППГ LoadDB.dbo.тест в C:\temp\test - ... txt-S 123.66.108.207 - U testuser-P testpass-c-r /r

мои данные были извлечением из БД Oracle на базе Unix, которая была разделена табуляцией и имела символ конца строки LF.

поскольку мои данные были разделены табуляцией, я не указал параметр a-t, значение по умолчанию BCP-tab.

потому что моя строка Терминатор был символом LineFeed (LF), затем я использовал-r /r

поскольку все мои данные загружались в поля char, я использовал параметр-c


I в каждом случае, когда я столкнулся с этой ошибкой, это заканчивается проблемой, когда количество столбцов в таблице не соответствует количеству столбцов, разделенных в текстовом файле. Простой способ подтвердить это-загрузить текстовый файл в excel и сравнить количество столбцов с количеством столбцов в таблице.


Я поделюсь своим опытом в этом вопросе. Мои пользователи отправляли мне кодировку UTF-8, и все работало нормально. Моя загрузка начала терпеть неудачу, когда они обновили кодировку для кодирования в UCS-2 LE BOM. Используйте notepad++ для проверки этих параметров.

возврат к UTF-8 исправил мою проблему.

этой ссылке помог мне решить мою проблему.

enter image description here