BCP导出时如何为字段添加双引号?SQL Agent作业存储过程求助
解决BCP导出时给字段添加双引号的问题
要让BCP导出的每个字段被双引号包裹,需要修改动态生成SELECT子句的逻辑,把每个字段的输出前后加上双引号。以下是调整后的代码:
方式一:使用ASCII字符码(推荐,不受配置影响)
SELECT CONCAT( '''' + CHAR(34) + ''' + ISNULL(', CASE WHEN id IN (/* 此处填入实际ID值 */) THEN QUOTENAME(name) ELSE 'CAST(' + QUOTENAME(name) + ' AS VARCHAR(MAX))' END, ', '''''') + ''' + CHAR(34) + ''' + ''', @Delim + ''','', ) FROM table c WHERE column = 'test';
方式二:直接转义双引号
SELECT CONCAT( '''"'' + ISNULL(', CASE WHEN id IN (/* 此处填入实际ID值 */) THEN QUOTENAME(name) ELSE 'CAST(' + QUOTENAME(name) + ' AS VARCHAR(MAX))' END, ', '''''') + ''"'' + ''', @Delim + ''','', ) FROM table c WHERE column = 'test';
关键说明
CHAR(34)对应ASCII码中的双引号,用它生成双引号不会受数据库QUOTED_IDENTIFIER配置影响,兼容性更强。- 动态SQL中单引号需用两个单引号转义(
''表示一个'),因此要在生成语句里输出",需拼接对应转义后的字符串片段。 - 给
CAST指定VARCHAR(MAX)可避免默认长度导致的字段内容截断问题。 - 务必填充
id IN ()中的实际ID集合,否则会触发SQL语法错误。
调整后生成的SELECT子句会将每个字段处理为"字段值"的格式,最终BCP导出结果就会是"Name"|"Name"|"Name"这样的形式。
内容的提问来源于stack exchange,提问作者Mikano
相关产品推荐
相关产品推荐

