SQL Server 2016之前版本(如2014)能否通过T-SQL将表转换为JSON
SQL Server 2014 环境下T-SQL生成JSON方案
首先明确结论:SQL Server 2014 没有内置JSON处理能力,你提到的XML转JSON、自定义T-SQL函数两种实现路径都是完全可行的,也是这个版本下生成JSON最常用的落地方式。
基于你现有XML逻辑的改造方案(改造成本最低)
你当前的存储过程已经完成了核心业务数据的查询、结构化XML生成,不需要重写数据查询逻辑,只需要两步调整就能输出JSON:
- 修正现有XML拼接逻辑:你现在最后用
(Objeto)作为分隔符拼接三个XML片段的写法存在解析风险,一旦业务字段里出现相同文本就会导致结构错乱,应该直接用XML原生语法嵌套子节点,构造完整的层级XML结构,示例调整如下:
-- 替换你原存储过程最后拼接三个XML的SELECT逻辑 SET @socio = ( SELECT TOP 1 -- 此处保留你原@socio查询里的所有CardCode、FederalTaxID等字段,无需改动 ( SELECT @contacto.query('/*') FOR XML PATH(''), TYPE ) AS ContactEmployees, ( SELECT @direccion.query('/*') FOR XML PATH(''), TYPE ) AS BPAddresses FROM tblsocio_negocios sn -- 此处保留你原有的所有INNER JOIN、WHERE条件,无需改动 FOR XML PATH ('BusinessPartner'), TYPE )
- 编写一个通用的XML转JSON标量函数,核心逻辑是遍历XML的所有节点、属性,区分字段类型做格式化:字符串类型加双引号并转义内部的引号、换行、斜杠等特殊字符;数值、布尔类型不加引号;空值输出
null;自动识别重复节点生成JSON数组。
直接编写自定义JSON生成函数
如果不想走XML中转,也可以直接编写T-SQL函数,在查询数据时直接拼接JSON字符串,实现时需要注意几个规则:
- 所有字符串类型值必须做转义处理,避免特殊字符导致JSON格式非法
- 数值、布尔类型值不需要包裹双引号,NULL值统一输出
null - 嵌套对象、数组要严格匹配大括号、中括号的闭合关系
注意:如果你的业务场景数据量较大、或者JSON结构非常复杂,更建议在业务应用层做JSON序列化,纯T-SQL实现的JSON生成逻辑维护成本更高,处理特殊字符的边界case也更多。
内容的提问来源于stack exchange,提问作者FoundingCoding99
相关产品推荐
相关产品推荐

