快速生成bcp in导表命令行的方法

把从Sybase或其它类型数据库导出的文本文件再次导入到sybase数据库的时候,bcp是个很好的工具。

本博客已有3篇关于bcp的文章:

 

如果要用bcp导入很多的表,对每一个表都要写一条语句是件很费劲的事情,尤其表数量很多的时候。简单的方法呢?

第一种方法: 利用SQL语句

在bcp out导出数据的时候,也就是生成相应的bcp out命令语句的时候,也同时生成bcp in导入的命令语句。

生成导出语句的SQL为:

select  "bcp "+db_name()+"."+user_name(uid)+"."+name+"  out /tmp/databcpout/" +name+ ".txt -Usa -P<sa_passwd> -S<server_name>  -c -T10000000 " from sysobjects where type='U' order by name

其中: 将<sa_passwd>,server_name> 分别替换成sa的密码和数据库服务器名。或者用对想要导出的表有查询权限的用户也行。

生成导入语句的SQL为:

select  "bcp "+db_name()+"."+user_name(uid)+"."+name+"  in /tmp/databcpout/" +name+ ".txt -Usa -P<sa_passwd> -S<server_name>  -c -T10000000 -b10000 " from sysobjects where type='U' order by name

 

第二种方法: 利用操作系统的工具生成导入命令

windows上生成导入命令的方法:

假设windows上导出的文本文件的扩展名为txt

FOR /F "usebackq tokens=4,* delims= " %i IN (`dir`) DO @echo bcp your_db_name.dbo.%~ni in %i -c -Usa -Psa_passwd  -Sserver_name -r\n -b10000

其中:将your_db_name,sa_passwd,server_name分别替换成被导入表所在的数据库,sa的密码,sybase数据库服务名。

-r\n 这个参数是指定导入的文本文件中是unix系统的上换行符。因为这些文件是从solaris数据库服务器上执行bcp得到的。 在windows机器上执行bcp out导出的文本文件中的换行符为:回车+新行 \r\n

如果想在bcp in导入数据前,将表内原来的数据先清空,则可以用下面的命令生成truncate table的SQL语句。

FOR /F "usebackq tokens=4,* delims= " %i IN (`dir`) DO @echo truncate your_db_name.dbo.%~ni

其中:将your_db_name替换成数据库名,确定一下数据库所有者是否为dbo。将生成的SQL语句拷贝到isql下批量执行截断表。

Solaris上用awk实现的命令如下:

find . -name "*.txt" | awk -F"." '{print $2}'| awk -F"/" '{print "bcp pmdb.dbo." $3  " in ." $0 ".txt -Usa -Psybase -Ssyb1503 -c -T10000000 -b10000 "}'

在windows上执行上面的语句的时候,每行的输出结果可能很多,可能会出现折行的情况。

调整命令提示符>布局>屏幕缓存区大小中的宽度和高度即可,如下图:

 

参考awk以及find命令的用法:

awk用法小结 http://hi.baidu.com/linxhchina/blog/item/8cadc42a4897709b023bf640.html

用du find命令查找文件及用awk 汇总文件大小 http://tlinle.blog.51cto.com/251944/389117

  • 本文链接地址:http://www.sybrepair.com/generate-bcp-in-table-syntax-fast.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《快速生成bcp in导表命令行的方法》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)