代码改变世界

用bcp导入大量数据(代替INSERT)

2010-08-13 15:44  清炒白菜  阅读(781)  评论(0编辑  收藏  举报

   写代码的时候, 经常需要大量的SQL数据来测试代码性能,如果用INSERT方式, 一行一行的插入到测试表,效率非常低下, 开多线程最多也就每秒几千行记录的速度。

  之前用BCP批量导出导入数据的时候, 就想到自己构造bcp的数据,然后批量导入, 速度非常快, 每秒至少几万行~几十万行的数据。

 

  构造bcp数据的过程很简单, 写段C#代码, 产生一个txt文件,不过需要注意一下几点注意事项

  1. 参考《bcp导入导出数据发生异常解决方案
  2. 若字段是NULL值,需要转换成\0
  3. 建议不要使用默认的\t作为Field的分隔符,因为不方便人工查看C#生成的数据文件, 是否少了什么字段, 或者多了什么关键字
  4. bcp命令有-w 和-c模式, 要与生成的txt文件格式匹配, -w 对应txt文件为Unicode, -c 对应txt文件为ANSI

 

  然后用bcp in导入,一般来说, 总会遇到些错误, 稍微修正一下数据格式, 就能正确导入了(bcp导入2进制数据还没研究过,只能针对都是string和int类型的字段)