使用格式化文件(固定宽度)进行批量插入 - 遇到意外的文件结尾


BULK INSERT [Alldlyinventory] 
   FROM     'C:UsersAdminDocuments2NobleEstatesDATADownloadOutputtest.txt' 
   WITH (FORMATFILE = 'C:SQL DataFormatFilestest.xml');

格式化文件:

 <?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="CharFixed" LENGTH="8"     COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="2" xsi:type="CharFixed" LENGTH="7"     COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharFixed" LENGTH="4"     COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharFixed" LENGTH="1"     COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="5" xsi:type="CharFixed" LENGTH="10"     COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="DAY_NUMBER" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="2" NAME="LCBO_NO" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="LOCATION_NUMBER" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="LISTING_STATUS" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="5" NAME="QTY_ON_HAND" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

但是我在SQL Server 2014上收到以下错误:

Msg 4832,级别 16,状态 1,第 1 行 批量加载:数据文件中遇到意外的文件结尾。 Msg 7399,级别 16,状态 1,第 1 行 链接服务器"(空("的 OLE DB 提供程序"BULK"报告了错误。提供程序未提供有关错误的任何信息。 Msg 7330,级别 16,状态 2,第 1 行 无法从链接服务器"(null("的 OLE DB 提供程序"BULK"中获取行。

这是一个固定宽度的导入。

示例 txt:

2016032803170570371L 000000014
2016032803367430371L 000000013
2016032803403800371L 000000036
2016032804007540371L 000000015

查看您的示例文本文件,看起来您有一个行终止符,即回车符 ( {CR} ( + 换行符 ( {LF} (。

您可以通过使用可以显示特殊符号的文本编辑器打开文本文件来检查这一点。我可以推荐Notepad++,它是免费的,适合这个目的(菜单View>Show Symbol>Show All Characters(。

如果行终止符确实是{CR}{LF}的,则应将xsi:type="CharTerm"TERMINATOR="rn"属性一起使用<RECORD>元素中最后一个<FIELD>

<RECORD>
    ...
    <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="rn" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<小时 />

您可以在以下链接中找到有关固定字段导入的详细信息: XML 格式化文件 (SQL Server( # 导入固定长度或固定宽度字段

最新更新