使用bcp批量导入数据时碰到的一些问题及解决

因为是初次使用bcp来初次导入数据,有些地方难免有些摸不着门道,碰了几次鼻子后,大约弄懂了一点,但是还是比较片面见识,甚至可能还有些错误之处,斗胆拿出来晒晒。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
先期准备:生成一个新表
create table testtb
(
productcode varchar(
10),
merchantprice numeric(
10,2),
totalstocks 
int,
productid 
int
)
go

提供的数据文件:testata.txt:
000123,12.3,20,123456
000124,12.3,20,123457
000125,12.3,20,123458
000126,12.3,20,123459

1)生成格式文件,这里提供四种生成方式
基于sql验证的命令行方式:
bcp mydb..testtb format nul 
--fd:\test.fmt -Slocalhost -Usa -Pmypass -t, -r\n
基于信任连接的命令行方式:
bcp mydb..testtb format nul 
--fd:\test.fmt -Slocalhost --t, -r\n
在查询分析器实现的sql命令,基于sql验证的:
exec xp_cmdshell 
'bcp mydb..testtb format nul -n -fd:\test.fmt -Slocalhost -Usa -Pmypass -t, -r\n'
在查询分析器实现的sql命令,基于信任连接的:
exec xp_cmdshell mydb..testtb format nul 
--fd:\test.fmt -Slocalhost --t, -r\n'

这里需要注意的是:使用xp_cmdshell执行操作时,所执行的命令及生成的格式化文件是在数据库所在的服务器上执行的。至于是不是有别的办法可以将格式化文件生成到本地磁盘,我没有能够实现出来,所以不敢妄言。

生成后的格式化文件d:\test.fmt其内容如下,但如果要使用此格式化文件导入文本数据文件到数据库中,则还需要对此数据做些修改才可以。
--------------------------------------------------------------------------
8.0
4
1       SQLCHAR       2       10      ","                       1     productcode       Chinese_PRC_CI_AS
2       SQLNUMERIC    1       19      ","                       2     merchantprice     ""
3       SQLINT        1       4       ","                       3     totalstocks       ""
4       SQLINT        1       4       "\r\n"                    4     productid         ""
---------------------------------------------------------------------------

2)使用生成的格式化文件导入数据
这里对格式化文件内容做些修改
--------------------------------------------------------------------------
8.0
4
1       SQLCHAR       0       10      ","                       1     productcode       Chinese_PRC_CI_AS
2       SQLCHAR       0       19      ","                       2     merchantprice     Chinese_PRC_CI_AS
3       SQLCHAR       0       10      ","                       3     totalstocks       Chinese_PRC_CI_AS
4       SQLCHAR       0       10      "\r\n"                    4     productid         Chinese_PRC_CI_AS
---------------------------------------------------------------------------
把原来生成的格式化文件中的非sqlchar字段都修改成了sqlchar,并修改前导改为0,另外增加了字符宽度。没有修改之前曾经做过导入,结果发现导入的内容根本不是自己想要的,也许是因为在导入是把对应数据的字符串转成了格式文件要求的数据格式,也就是用二进制的方式读取了数据文件的内容,结果出现问题。在怀疑出现问题的原因后,修改了格式化文件,运行后,数据正常导入,并且相应的数据也做了正确转换。
执行的命令如下:
基于sql验证的命令行方式:
bcp mydb..testtb 
in d:\testdata.txt -Slocalhost  -Usa -Pmypass -fd:\test.fmt
基于信任连接的命令行方式:
bcp mydb..testtb 
in d:\testdata.txt -Slocalhost --fd:\test.fmt
在查询分析器实现的sql命令,基于sql验证的:
EXEC master..xp_cmdshell 
'bcp mydb..testtb in d:\testdata.txt -Slocalhost -Usa -Pmypass -fd:\test.fmt'
在查询分析器实现的sql命令,基于信任连接的:
EXEC master..xp_cmdshell 
'bcp mydb..testtb in d:\testdata.txt -Slocalhost -T -fd:\test.fmt'


转载于:https://www.cnblogs.com/mincyw/archive/2008/10/10/1308446.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值