在BCP中遇到意外的EOF

时间:2014-10-13 11:37:22

标签: sql azure bcp

尝试将数据导入Azure。 在Management Studio 2005中创建了一个文本文件。 我已经尝试了逗号和制表符分隔的文本文件。

BCP IN -c -t,-r \ n -U -S -P 我收到错误{SQL Server Native Client 11.0]在BCP数据文件中遇到意外的EOF

以下是我用来创建文件的脚本:

 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)
)

实际上有几十万条实际记录,我是从不同的服务器上完成的,唯一的区别就是管理工作室的版本。

10 个答案:

答案 0 :(得分:3)

&#34;意外的EOF&#34;通常意味着列或行终止符不是您所期望的 也就是说,这些命令行参数与文件匹配

典型原因:

  • Unix vs Windows line endings
  • 包含列分隔符的文本数据(实际数据中的逗号)
  • 或两者兼而有之。

SSMS应该与它无关:它是重要的格式(预期与实际)

答案 1 :(得分:3)

如果文件以制表符分隔,则列分隔符的命令行标志应为-t\t -t,

答案 2 :(得分:2)

仅仅是我遇到同样错误的一个FYI,结果发现我的目标表包含一个比DAT文件多的列!

答案 3 :(得分:1)

我认为我们大多数人更喜欢现实世界的例子,而不是语法提示,所以这就是我所做的:

bcp LoadDB.dbo.test在C:\ temp \ test.txt -S 123.66.108.207 -U testuser -P testpass -c -r / r

我的数据是来自基于Unix的Oracle数据库的摘录,该数据库以制表符分隔,并且具有LF行尾字符。

因为我的数据是制表符分隔的,所以我没有指定-t参数,bcp默认是tab。

因为我的行终止符是LineFeed(LF)字符,所以我使用了-r / r

因为我的数据都被加载到char字段中,所以我使用了-c参数

答案 4 :(得分:1)

在每种情况下,我都会遇到此错误,最终结果是表中的列数与文本文件中分隔的列数不匹配的问题。确认这一点的简单方法是将文本文件加载到excel中,并将列数与表中的列数进行比较。

答案 5 :(得分:1)

在EXCEL中打开CSV文件,然后“另存为”新的CSV文件

enter image description here

答案 6 :(得分:1)

这个谜题的答案是阴险的。 我度过了回不去的时光...

如果您使用的是 Windows,请使用 NotePad++ 并在菜单上的“编码”下将其更改为:

UCS-2 LE BOM

LE = 小端...

如此可恶的错误!我刚刚安装了 SQL Server 2019 和最新的 SQLCMD/BCP 工具。似乎这个错误已经存在一段时间了。

这个人救了我一命:https://shades-of-orange.com/post/Unexpected-EOF-encountered-in-BCP-data-file

答案 7 :(得分:0)

我将分享我在此问题上的经验。我的用户向我发送了UTF-8编码,并且一切正常。当他们将编码更新为UCS-2 LE BOM中的编码时,我的加载开始失败。使用记事本++检查这些设置。

恢复为UTF-8解决了我的问题。

link帮助我解决了我的问题。

enter image description here

答案 8 :(得分:0)

在尝试从数据文件到表的记录中进行bcp时,我遇到了相同的错误。可行的解决方法是在Notepad ++或类似的编辑器中打开文件,并在文件末尾添加多余的行。这适用于我的情况-字段分隔符-| ^ |,行分隔符-新行(LRCF)。

使用的命令:-T -c -t“ | ^ |”

中的bcp

答案 9 :(得分:0)

就我而言,问题是我尝试导入的记录的外键无效