【问题标题】:Unexpected EOF encountered in BCP在 BCP 中遇到意外的 EOF
【发布时间】:2014-12-07 23:09:37
【问题描述】:

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

BCP IN -c -t, -r\n -U -S -P 我收到错误 {SQL Server Native Client 11.0]Unexpected 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)
)

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

【问题讨论】:

标签: sql azure bcp


【解决方案1】:

如果文件是制表符分隔的,那么列分隔符的命令行标志应该是-t\t-t,

【讨论】:

  • 应该是-t"\t"吗?就像我做的-S"ServerName" -U"UserName"?另外,-t, 是什么?
  • 不,不要使用引号,-t 是我认为的字段终止符的缩写
  • 实际上tab 分隔值是bcp 的默认值,因此您根本不必指定任何-t-r。这是我亲身经历的
【解决方案2】:

仅供参考,我遇到了同样的错误,结果我的目标表包含比 DAT 文件多一列!

【讨论】:

    【解决方案3】:

    “Unexpected EOF”通常意味着列或行终止符不是您所期望的 也就是说,您的命令行参数与文件匹配

    典型原因:

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

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

    【讨论】:

    • 好吧,我在 Notepad++ 中打开它,行终止符是 CRLF。我找不到嵌入的逗号,但是当我用制表符分隔它时遇到了同样的错误。
    • @alemus:你的命令行有-r\n,它是LF。 CR 可能会造成混淆。
    【解决方案4】:

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

    【讨论】:

    • 我发现我需要在导入文件中为我的 ID 列值添加一个占位符,即使它是一个自动生成的索引列。似乎需要那个占位符。
    【解决方案5】:

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

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

    我的数据是从基于 Unix 的 Oracle DB 中提取的,它是制表符分隔的,并且有一个 LF 行尾字符。

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

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

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

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

        【解决方案7】:

        在 EXCEL 中打开 CSV 文件并“另存为”新的 CSV 文件

        【讨论】:

          【解决方案8】:

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

          使用的命令:bcp in -T -c -t"|^|"

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              这个谜题的答案是阴险的。 我花了我永远无法回来的时间......

              如果您使用的是 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

              【讨论】:

                猜你喜欢
                • 2015-03-05
                • 2019-02-17
                • 2022-11-11
                • 1970-01-01
                • 1970-01-01
                • 2013-09-26
                • 1970-01-01
                • 2018-01-23
                • 1970-01-01
                相关资源
                最近更新 更多