2014-10-13 2 views
3

Пытается импортировать данные в Azure. Создал текстовый файл в Management Studio 2005. Я пробовал текстовый файл с разделителями-запятыми и табуляциями.Неожиданный EOF, встреченный в BCP

BCP IN -c -t, -r \ п -U -S -P Я получаю ошибку {SQL Server Native Client 11.0] Неожиданный конец файла встречается в 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) 
) 

есть на самом деле несколько сот тысяч реальных записей, и я сделал это с дифферя t сервер, единственная разница - это версия студии управления.

ответ

3

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

+0

Должно ли это быть '-t '\ t" '? Как и я -S "ServerName" -U "UserName" '? Кроме того, что такое '-t,'? –

+1

no не использовать кавычки, '-t' является коротким для терминатора поля, я думаю, – maxymoo

+3

Фактические значения' tab' разделяются значениями по умолчанию для 'bcp', поэтому вам не нужно указывать какие-либо' -t' и '- r'. Это то, что я испытал сам – Daria

2

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

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

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

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

+0

Ну, я открыл его в Notepad ++, а терминатор строк - CRLF. Никаких встроенных запятых, которые я мог бы найти, но получал ту же ошибку, когда я вставлял ее в таблицу. – alemus

+0

@alemus: Ваша командная строка имеет '-r \ n', которая является LF. Возможно, CR путает вещи. – gbn

1

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

0

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

BCP LoadDB.dbo.test в C: \ Temp \ test.txt -S 123.66.108.207 - U testuser -P testpass -c -r/r

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

Поскольку мои данные были ограничены табуляцией, я не указывал параметр -t, значение bcp по умолчанию - это вкладка.

Поскольку мой ряд терминатора был перевод строки (LF) характер, то я использовал -r/г

Поскольку мои данные были все загрузки в символьных полей я использовал параметр -c

0

Вы можете использовать Sql Server Management Studio (SSMS) Импорт утилиты для импорта источника плоского файла. Он удобен в использовании, настраивается, сообщает о допустимых ошибках и экономит время.

  1. правой кнопкой мыши на базе данных SQL
  2. Выберите задачи> Импорт данных ..
  3. В мастере SSMS импортирования данных, выберите источник плоских файлов, проверка отображения из файла против схемы базы данных и импортировать данные
Смежные вопросы