BCP 中遇到意外的 EOF

问题描述 投票:0回答:11

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

BCP IN -c -t, -r -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)
)

实际上有几十万条实际记录,我是在不同的服务器上完成的,唯一的区别是 Management Studio 的版本。

sql azure bcp
11个回答
6
投票

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

-t\t
-t,


6
投票

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


5
投票

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

典型原因:

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

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


5
投票

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


5
投票

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

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

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


4
投票

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

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

我的数据是从基于 Unix 的 Oracle DB 中提取的,该数据库以制表符分隔并具有 LF 行尾字符。

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

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

因为我的数据全部加载到字符字段中,所以我使用了 -c 参数


2
投票

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


2
投票

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

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


1
投票

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

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


1
投票

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


0
投票

对于我的情况,我尝试将 csv 文件导入 Azure SQL Server,我使用了以下语法

BCP [数据库名].dbo.[表名] IN [本地文件夹][文件名].csv -S [服务器名] -U [用户名]@[服务器名] -P [密码] -c -t,

  • 要格外小心“-t,

为我工作:')

© www.soinside.com 2019 - 2024. All rights reserved.