我有一个巨大的固定长度平面文件,没有列分隔符,我试图使用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个字符,在这种情况下值是空格。所有列都允许空值。谁能让我知道我做错了什么?为什么我会收到这个错误?
答案 0 :(得分:0)
多年来我没有看过SQL Server的东西,但我的下意识回答是你需要在目标表中定义一个主键。如果您有一个,则BACD列中的非唯一项可能违反现有索引规则。
让我知道这是否有帮助。
答案 1 :(得分:0)
它工作正常......将NCharFixed改为CharFixed