Непредвиденный 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 исправил мою проблему.
этой ссылке помог мне решить мою проблему.