【发布时间】:2016-11-23 06:39:37
【问题描述】:
我正在尝试创建一个简单的Bulk Insert 命令来将固定宽度的文本文件导入表格。完成这项工作后,我将对其进行扩展以使我的更复杂的导入工作。
我目前收到错误消息...
消息 4866,第 16 级,状态 7,第 1 行
批量加载失败。数据文件中第 1 行第 1 列的列太长。请验证是否正确指定了字段终止符和行终止符。
显然我已经检查了文件中的终止符。对于测试数据,我只是在记事本中键入了一个 3 行文本文件。在这个阶段,我只是想每行导入一列。我已经填充了前两行,所以每行都是 18 个字符。
Test.txt
This is line one
This is line two
This is line three
当我在 Notepad++ 中查看文件并打开所有字符时,我在每行的末尾看到 CRLF,而文件末尾没有空行。
这是我正在使用的 SQL:
USE [Strata]
GO
drop table VJR_Bulk_Staging
Create Table [dbo].[VJR_Bulk_Staging](
[rowid] int Identity(1,1) Primary Key,
[raw] [varchar](18) not null)
GO
Bulk Insert [VJR_Bulk_Staging]
From 'c:\temp\aba\test.txt'
with (FormatFile='c:\temp\aba\test2.xml')
这是格式 XML 文件。我尝试了几种变体。这是使用 BCP 命令创建的。
bcp strata.dbo.vjr_bulk_staging format nul -f test2.xml -x -n -T -S Server\Instance
这为我的 rowid 列创建了一条记录和一个行条目,我认为这是一个身份字段,因此我将其删除。
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="18" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="raw" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
我正在 SQL Server 2008 R2 Express 上进行测试。
任何想法我哪里出错了?
【问题讨论】:
标签: sql-server tsql bulkinsert bcp sql-server-2008r2-express