固定长度批量导入与BCP格式文件

时间:2013-12-06 18:43:48

标签: sql sql-server bcp

我有一个巨大的固定长度平面文件,没有列分隔符,我试图使用BCP实用程序将此数据移植到表中。

以下是我使用BCP创建的示例格式:

<?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="NCharFixed"   LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharFixed"  LENGTH="9"/>
  <FIELD ID="3" xsi:type="NCharFixed"   LENGTH="20"/>
  <FIELD ID="4" xsi:type="NCharFixed"   LENGTH="4"/>
  <FIELD ID="5" xsi:type="NCharFixed"  LENGTH="15"/>
  <FIELD ID="6" xsi:type="NCharFixed"   LENGTH="15"/>
  <FIELD ID="7" xsi:type="NCharFixed"   LENGTH="1"/>
  <FIELD ID="8" xsi:type="NCharFixed"  LENGTH="8"/>
  <FIELD ID="9" xsi:type="NCharFixed"  LENGTH="8"/>
  <FIELD ID="10" xsi:type="NCharTerm" TERMINATOR="\r\n" LENGTH="19"/>

 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="BACD"  xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="2" NAME="SSN" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="3" NAME="LASTNAME" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="4" NAME="suffix" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="5" NAME="firstname" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="6" NAME="middlename" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="7" NAME="code" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="8" NAME="dod" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="9" NAME="dob" xsi:type="SQLNCHAR" />
  <COLUMN SOURCE="10" NAME="blank" xsi:type="SQLNCHAR" />

 </ROW>
</BCPFORMAT>

我的桌面设计: BACD nchar(1),SSN nchar(9),Lastname nchar(20),后缀nchar(4),firstname nchar(15),middlename nchar(15),code nchar(1),dod nchar(8),dob nchar (8),空白nchar(19)

示例数据:  005070002Foobar FOOOO 1100577505671903

SQL查询:

BULK INSERT sample.dbo.DD FROM 'C:\sample-for-test.txt'
WITH (FORMATFILE = 'C:\format-n.xml', ROWTERMINATOR='\r\n');
SELECT * FROM sample.dbo.DD;

我得到的错误是: Msg 4863,Level 16,State 1,Line 1 第1行第1列(BACD)的批量加载数据转换错误(截断)。 Msg 7399,Level 1,State 1,Line 1 链接服务器“(null)”的OLE DB提供程序“BULK”报告错误。提供商未提供有关错误的任何信息。 Msg 7330,Level 16,State 2,Line 1 无法从OLE DB提供程序“BULK”获取链接服务器“(null)”。

的行

我检查了BACD列,长度是1个字符,在这种情况下值是空格。所有列都允许空值。谁能让我知道我做错了什么?为什么我会收到这个错误?

2 个答案:

答案 0 :(得分:0)

多年来我没有看过SQL Server的东西,但我的下意识回答是你需要在目标表中定义一个主键。如果您有一个,则BACD列中的非唯一项可能违反现有索引规则。

让我知道这是否有帮助。

答案 1 :(得分:0)

它工作正常......将NCharFixed改为CharFixed