SQLSERVER调用BCP命令导入导出CSV文件


bcp命令可以在CMD 或 SQLSERVER中调用,这里适用SQLSERVER中调用的情况。

  • BCP命令参数
    BCP命令参数

  • 首先要开启xp_cmdshell

    -- 允许配置高级选项  
    EXEC master.sys.sp_configure 'show advanced options', 1  
    -- 重新配置  
    RECONFIGURE  
    -- 启用xp_cmdshell  
    EXEC master.sys.sp_configure 'xp_cmdshell', 1   
    ---- 禁用xp_cmdshell  
    -- EXEC master.sys.sp_configure 'xp_cmdshell', 0
    --重新配置  
    RECONFIGURE
    
  • BCP导出CSV文件

    -- 整表导出
    EXEC master..xp_cmdshell 'bcp TB_TEST01 out D:\TEST01.csv -S"(local)" -U"sa" -P"sa"  -t "," -w'
    
    -- SQL查询结果导出
    EXEC master..xp_cmdshell 'bcp "SELECT COLA, COLB FROM TB_TEST01 WHERE COLA=1" queryout D:\TEST01.csv -S"(local)" -U"sa" -P"sa"  -t "," -w'
    
  • BCP导入CSV文件

    --将CSV文件导入表
    EXEC master..xp_cmdshell 'bcp TB_TEST01 in "D:\TEST01.csv" -S"(local)" -U"sa" -P"sa" -k -c -t"," -b 100000'
    
  • 特殊需求:

    • 导出的CSV文件字段加双引号

      --方法: 在sql中加引号,然后再导出
      SELECT QUOTENAME(COLA,'"'),QUOTENAME(COLB,'"') FROM YYZX_RUN.dbo.TB_TEST01
      
      EXEC master..xp_cmdshell 'bcp "    SELECT QUOTENAME(COLA,'"'),QUOTENAME(COLB,'"') FROM TB_TEST01" queryout D:\TEST01.csv -S"(local)" -U"sa" -P"sa"  -t "," -w'
      
    • 导入的CSV文件中带有双引号

      情形一:TEST01.csv

      "DFAD","55"
      "DERE,RR","66"
      

      解决方案:导入后REPLACE()

      情形二:TEST01.csv

      DFAD,55
      "DERE,RR",66
      

      导入后数据会错乱,暂时无解。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM