Sql 在BCP中遇到意外的EOF

Sql 在BCP中遇到意外的EOF,sql,azure,bcp,Sql,Azure,Bcp,正在尝试将数据导入Azure。 在ManagementStudio 2005中创建了一个文本文件。 我尝试了逗号和制表符分隔的文本文件 BCP IN-c-t,-r\n-U-S-p 我在BCP数据文件中遇到错误{SQL Server Native Client 11.0]意外EOF 以下是我用来创建文件的脚本: SELECT top 10 [Id] ,[RecordId] ,[PracticeId] ,[MonthEndId] ,ISNULL(C

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

BCP IN-c-t,-r\n-U-S-p 我在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>
实际上有几十万条实际记录,我是从不同的服务器上完成的,唯一的区别是management studio的版本。

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

典型原因:

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

SSM应该与此无关:它是格式(预期与实际)这很重要

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

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

我想我们大多数人都更喜欢真实的示例语法提示,下面是我所做的:

C:\temp\test.txt-S 123.66.108.207-U testuser-p testpass-C-r/r中的bcp LoadDB.dbo.test

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

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

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


因为我的数据都加载到了char字段中,所以我在遇到此错误时都使用了-c参数,结果是表中的列数与文本文件中分隔的列数不匹配。确认这一点的简单方法是将文本文件加载到excel并与e列计数为表的计数。

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

恢复到UTF-8修复了我的问题

这帮助我解决了我的问题


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


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


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

在我的例子中,问题是我试图导入的记录有一个无效的外键

我用记事本++打开了它,行终止符是CRLF。我找不到嵌入的逗号,但当我用制表符分隔它时,得到了相同的错误。@alemus:您的命令行有
-r\n
,它是LF。可能是CRI是不是应该是
-t“\t”
?就像我做的
-s“ServerName”-U“UserName”
?另外,什么是
-t,
?不,不要使用引号,
-t
是字段终止符的缩写,我想实际上
选项卡
分隔值是
bcp
的默认值,所以你根本不必指定任何
-t
-r
。这就是我自己经历的。我发现我需要添加一个placeho导入文件中“我的ID”列值的文件夹,即使它是自动生成的索引列。似乎需要该占位符。它有助于解决此问题。谢谢
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)
)