日期:2014-05-19  浏览次数:20493 次

BCP问题,怎么在复制的时候指定一列的值?
用BCP往表里面复制的时候,表里有两列,文件中的内容就一列,想复制到表里面的时候文件中的一列复制到表里面的第一列,第二列在程序中指定一个值,咋复制?
例如表A两列,分别为aa和bb,文本文件test.txt里面有一列数据,想把这列数据复制到A表中的aa列中,bb指定成字符串‘01’该怎么做?怎么控制这个格式?

------解决方案--------------------
不用改程序,将表A的bb列指定默认值 "01 "即可
------解决方案--------------------
如果不插入默认值,则该列必须定义为允许空值。


默认情况下,如果使用 bcp 实用工具或 BULK INSERT 语句将数据复制到表中,则表中为这些列定义的默认值都会得到遵守。例如,如果数据文件中包含一个空字段,则就会装载该列的默认值。

例如,数据文件 Publishers.txt 包括以下两行:

0111,New Moon Books,Boston,MA,
0222,Binnet & Hardley,Washington,DC,USA

逗号分隔各字段,换行符分隔各行。第一行中没有国家。如果 publishers 表的 country 列具有默认值 "USA ",则当没有指定 -k 开关或 KEEPNULLS 子句时,用 bcp 或 BULK INSERT 语句将这些行大容量装载到表中,如下所示:

0111 New Moon Books Boston MA USA
0222 Binnet & Hardley Washington DC USA

而若要将数据从 Publishers.txt 数据文件大容量复制到 pubs 数据库的 publishers 表中,并要在 country 列中插入空值而不是默认值 "USA ",请在命令提示符下执行以下命令:

bcp pubs..publishers in publishers.txt -c -t, -Sservername -Usa -Ppassword -k

另外,也可以在 SQL 查询分析器这样的查询工具中使用 BULK INSERT 语句来大容量复制数据:

BULK INSERT pubs..publishers FROM 'c:\publishers.txt '
WITH (
DATAFILETYPE = 'char ',
FIELDTERMINATOR = ', ',
KEEPNULLS
)


说明 尽管如果指定了 -k 或 KEEPNULLS,大容量复制操作就不会检查表的 DEFAULT 定义,但是对其它并发执行的INSERT 语句,DEFAULT 定义仍会起到应有的作用。