如何使用TSQL将表数据按双引号包裹、分号分隔并返回列头
用TSQL实现查询结果按指定格式拼接(含列名、空值处理)
需求明确:用TSQL生成符合以下要求的结果(可直接输出为文本文件):
- 每个字段值用双引号包裹
- 字段之间用分号分隔
- 必须包含列名行
- 空字符串和NULL值统一显示为
""
完整实现代码
DROP TABLE IF EXISTS #Temp CREATE TABLE #Temp ( Name VARCHAR(8) NULL, Age VARCHAR(8) NULL, City VARCHAR(8) NULL ) INSERT INTO #Temp (Name, Age, City) VALUES ('Mike','', NULL ) -- Age为空字符串,City为NULL -- 生成列名行 SELECT '"' + CONCAT_WS('";"', 'Name', 'Age', 'City') + '"' AS Result UNION ALL -- 生成数据行,将NULL转为空白字符串 SELECT '"' + CONCAT_WS('";"', ISNULL(Name, ''), ISNULL(Age, ''), ISNULL(City, '')) + '"' AS Result FROM #Temp
执行结果
"Name";"Age";"City" "Mike";"";""
关键细节说明
- 空值统一处理:用
ISNULL(col, '')把NULL值转为空字符串,避免CONCAT_WS直接忽略NULL,确保空字符串和NULL最终都显示为""。 - 格式拼接逻辑:
- 首尾的
'"'负责给整行的第一个字段开头、最后一个字段结尾加上双引号 CONCAT_WS('";"', ...)用";"作为分隔符,自动在字段间生成";",刚好实现"字段1";"字段2"的格式
- 首尾的
- 合并列名与数据:用
UNION ALL而非UNION,既避免不必要的去重操作提升性能,又能保证列名行始终排在数据行之前。
内容的提问来源于stack exchange,提问作者Etienne
相关产品推荐
相关产品推荐

