【发布时间】:2015-07-06 21:49:02
【问题描述】:
假设我有一张桌子
CREATE TABLE [T1](
[ID] [int] NOT NULL,
[Level] [int] NULL,
[N1] [int] NULL,
[N2] [int] NULL)
我有一个包含四个分隔字段的文件
1,2,3,4
2,a,5,8
3,X,11,12
...
文件很大(几千万或几亿行) 我正在使用 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="CharTerm" TERMINATOR="\t"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\n"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="ID" xsi:type="SQLINT"/>
<COLUMN SOURCE="2" NAME="Level" xsi:type="SQLINT"/>
<COLUMN SOURCE="3" NAME="N1" xsi:type="SQLINT"/>
<COLUMN SOURCE="4" NAME="N2" xsi:type="SQLINT"/>
</ROW>
</BCPFORMAT>
问题是:如何指定字段 2 而不是字段 2,而我希望列 2 为 NULL?换句话说,我如何指示 bcp 跳过一列?如果我只是删除
<COLUMN SOURCE="2" ...
所有列都将移动,第 2 列填充字段 3 中的数据,第 3 列填充字段 4 中的值,第 4 列留空。 另一种方法是将此列设置为某个固定值,例如,为每一行设置 0。
【问题讨论】:
标签: sql-server bulkinsert bcp