在BCP中遇到意外的EOF

ale*_*mus 7 sql bcp azure

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

BCP IN -c -t,-r \n -U -S -PI在BCP数据文件中遇到错误{SQL Server Native Client 11.0]意外的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>
Run Code Online (Sandbox Code Playgroud)

这是插入的表格

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)
)
Run Code Online (Sandbox Code Playgroud)

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

Pro*_*Sky 6

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

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

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

在此输入图像描述


gbn*_*gbn 5

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

典型原因:

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

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


max*_*moo 5

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

  • 实际上,`tab` 分隔值是`bcp` 的默认值,因此您根本不必指定任何`-t` 和`-r`。这是我亲身经历的 (4认同)

小智 5

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


Cla*_*era 5

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