尝试将数据导入到 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 的版本。
如果文件是制表符分隔的,则列分隔符的命令行标志应为
-t\t
-t,
仅供参考,我遇到了同样的错误,结果发现我的目标表包含比 DAT 文件多一列!
“Unexpected EOF”通常意味着列或行终止符不是您所期望的 也就是说,您的命令行参数确实与文件匹配
典型原因:
SSMS 应该与此无关:重要的是格式(预期与实际)
在我遇到此错误的每种情况下,最终都会出现一个问题:表中的列数与文本文件中分隔的列数不匹配。确认这一点的简单方法是将文本文件加载到 Excel 中并将列数与表的列数进行比较。
我将分享我对这个问题的经验。我的用户向我发送 UTF-8 编码,一切正常。当他们将编码更新为 Encode in UCS-2 LE BOM 时,我的负载开始失败。使用notepad++检查这些设置。
恢复到 UTF-8 解决了我的问题。
这个链接帮助我解决了我的问题。
我认为我们大多数人更喜欢现实世界的例子而不是语法提示,所以这就是我所做的:
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 参数
这个谜题的答案是阴险的。 我度过了再也回不来的时光...
如果您使用的是 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
在尝试将记录从数据文件传输到表时,我遇到了同样的错误。有效的解决方法是在 Notepad++ 或类似编辑器中打开文件,并在文件末尾添加额外的行。这适用于我的情况 - 字段分隔符 - |^|,行分隔符 - 新行(LRCF)。
使用命令:bcp in -T -c -t"|^|"
就我而言,问题是我尝试导入的记录具有无效的外键
对于我的情况,我尝试将 csv 文件导入 Azure SQL Server,我使用了以下语法
BCP [数据库名].dbo.[表名] IN [本地文件夹][文件名].csv -S [服务器名] -U [用户名]@[服务器名] -P [密码] -c -t,
为我工作:')