bcp命令可以在CMD 或 SQLSERVER中调用,这里适用SQLSERVER中调用的情况。
-
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
导入后数据会错乱,暂时无解。
-