尝试将数据导入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)
)
实际上有几十万条实际记录,我是从不同的服务器上完成的,唯一的区别就是管理工作室的版本。
答案 0 :(得分:3)
&#34;意外的EOF&#34;通常意味着列或行终止符不是您所期望的 也就是说,这些命令行参数与文件匹配
典型原因:
答案 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)
答案 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帮助我解决了我的问题。
答案 8 :(得分:0)
在尝试从数据文件到表的记录中进行bcp时,我遇到了相同的错误。可行的解决方法是在Notepad ++或类似的编辑器中打开文件,并在文件末尾添加多余的行。这适用于我的情况-字段分隔符-| ^ |,行分隔符-新行(LRCF)。
使用的命令:-T -c -t“ | ^ |”
中的bcp答案 9 :(得分:0)
就我而言,问题是我尝试导入的记录的外键无效