You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:16:07