zoukankan      html  css  js  c++  java
  • bcp+Sql语句抽取数据导出

      最近由于项目的需求,需要将项目数据库中的数据按照一定的规则抽取出来,然后再导入到另外一个结构相同的数据库中;之前也使用过bcp的功能,但是只使用bcp将整个表的数据导入到一个csv文件中,查看了一下bcp命令的参数,发现bcp命令后面可以加sql语句,然后带上-queryout参数,就可以按照自己的逻辑将数据抽取出来,然后导入到csv文件中了,但是在实际使用中还是遇到了不少的困难,经过多次尝试,最终还是得以完成了,也积累了如下几个小经验。
       一、bcp命令可以直接在Command窗口运行,你可以单击开始菜单-运行-cmd-进入Command窗口,然后输入你编写好的bcp语句
       二、可以调用系统存储过程master..xp_cmdshell来调用bcp命令
       三、如果需要使用master..xp_cmdshell存储过程,需要先打开sqlserver的xp_cmdshell功能,可以进入sqlserver外围配置管理器-功能配置管理器-选中xp_cmdshell-开启。也可以通过执行sql语句的方式打开xp_cmdshell功能,如下:
         USE master 
         EXEC sp_configure 'show advanced options', 1
         RECONFIGURE WITH OVERRIDE
         EXEC sp_configure 'xp_cmdshell', 1     --1,开启;0,关闭
         RECONFIGURE WITH OVERRIDE
           
       四、调用master..xp_cmdshell调用bcp时,整个bcp命令要放在单引号内作为master..xp_cmdshell存储过程的参数,如:
          exec master..xp_cmdshell 'bcp sql语句 -queryout d:\test.csv -Usa -Ppassword -S127.0.0.1 -c '
       五、sql语句中涉及的表名,必须用数据库.拥有者.表名的格式,如SchoolDataBase.dbo.School
          六、sql语句需要放在双引号内,而在实际应用时,单引号和双引号太多,而且嵌套,还是需要变化一下,采用字符串连接的方式,如:
           "exec master..xp_cmdshell 'bcp \""+sql语句+"\"  -queryout d:\test.csv -Usa -Ppassword -S127.0.0.1 -c'"
       七、sql语句不可以有回车换行符,这个是折腾我半天时间才发现的,没办法,只能再曲线救国,于是出现了如下的sql语句:
          "exec master..xp_cmdshell 'bcp \""+sql语句.Replace("\r\n"," ")+"\"  -queryout -Usa -Ppassword -S127.0.0.1 -c'"
     

      这样,将上面语句作为一条sql语句放在sqlCommand中进行执行即可。

        经过上述一番折腾,终于可以抽取数据导出了。
     

  • 相关阅读:
    傻傻分不清的__proto__与prototype
    Groovy 学习资料
    ES6箭头函数()=>{} 与function的区别
    032_磁盘格式时不同的分区label的区别
    004windows输入输出重定向
    SpringBoot @Configuration、@Bean注解的使用详解(配置类的实现)
    SpringBoot 自定义错误页2(进阶:简单地自定义Error数据、Error视图)
    SpringBoot Lombok使用详解4(@Data、@Value、@NonNull、@Cleanup)
    SpringBoot Lombok使用详解2(@Setter、@Getter、@ToString、@EqualsAndHashCode)
    SpringBoot 自定义错误页1(基础:配置404等错误的静态页面、动态模版页面)
  • 原文地址:https://www.cnblogs.com/RascallySnake/p/1880287.html
Copyright © 2011-2022 走看看