如何在SQL Server的BCP工具中用引号包裹字段值?
SQL Server 2016 BCP导出带引号字段的文本文件方案
BCP没有直接给所有字段添加双引号的内置参数,以下两种实用方法可以实现需求:
方法1:通过自定义查询手动包裹字段
将原命令的out模式改为queryout,在查询中给每个字段前后拼接双引号,同时处理NULL值避免异常输出。
修改后的批处理命令示例:
bcp "SELECT '"' + ISNULL(CAST(字段1 AS VARCHAR(MAX)), '') + '"', '"' + ISNULL(CAST(字段2 AS VARCHAR(MAX)), '') + '"' FROM %1..UI_CPT_Descriptions_Spanish" queryout "%2\OutGoing_Data\PROD.FMC2.CPTLANGUAGES.txt" -q -T -c -S DB403D -t"," >>%2\%1Export.log
关键细节:
- 用
queryout替代out,支持执行自定义SQL查询 ISNULL(CAST(字段名 AS VARCHAR(MAX)), '')处理NULL值,防止导出NULL字符串或空引号对- 批处理中用两个双引号
""转义为一个双引号" -t","指定字段分隔符为",",最终输出格式为"字段值1","字段值2"
方法2:使用XML格式文件定义字段前缀后缀
通过生成并修改格式文件,给每个字段指定前缀和后缀为双引号,无需修改原表查询。
步骤1:生成默认XML格式文件
bcp %1..UI_CPT_Descriptions_Spanish format nul -c -x -f CPTLanguages.fmt -T -S DB403D
步骤2:编辑格式文件
打开生成的CPTLanguages.fmt,给每个<COLUMN>节点添加PREFIX='"'和SUFFIX='"',示例节点:
<COLUMN SOURCE="1" NAME="字段1" xsi:type="SQLCHAR" PREFIX='"' SUFFIX='"' MAX_LENGTH="255"/> <COLUMN SOURCE="2" NAME="字段2" xsi:type="SQLCHAR" PREFIX='"' SUFFIX='"' MAX_LENGTH="500"/>
步骤3:用格式文件执行导出
bcp "%1..UI_CPT_Descriptions_Spanish" out "%2\OutGoing_Data\PROD.FMC2.CPTLANGUAGES.txt" -q -T -c -S DB403D -f CPTLanguages.fmt -t"," >>%2\%1Export.log
说明:格式文件的前缀后缀会自动给每个字段包裹双引号,配合-t","分隔符,生成标准的带引号分隔格式。
内容的提问来源于stack exchange,提问作者SidC
相关产品推荐
相关产品推荐

