MS SQL Server大JSON字符串转XML后如何使用JSON功能处理?
解决SQL Server中大JSON字符串的JSON函数处理问题
首先明确:你转XML只是为了查看完整内容,但处理JSON必须用原NVARCHAR(MAX)类型的字段,SQL Server的JSON函数(JSON_VALUE、OPENJSON等)只识别字符串格式的JSON,不需要经过XML转换。
直接使用原字段调用JSON函数
假设你的日志表名为EventLogs,存储JSON的字段为EventData(NVARCHAR(MAX)类型),直接对该字段使用JSON函数即可:
示例1:用OPENJSON解析JSON数组
如果存储的是JSON数组,用OPENJSON配合CROSS APPLY可以把数组拆成行:
SELECT parsed.EventID, parsed.EventName, parsed.EventTime FROM EventLogs el CROSS APPLY OPENJSON(el.EventData) WITH ( EventID INT '$.id', EventName NVARCHAR(200) '$.event_name', EventTime DATETIME2 '$.occur_time' ) parsed;
示例2:用JSON_VALUE提取单个值
如果只需要提取数组中某个位置的特定值:
SELECT JSON_VALUE(el.EventData, '$[0].event_name') AS FirstEventName, JSON_VALUE(el.EventData, '$.common_info.source') AS SourceSystem FROM EventLogs el;
关于直接SELECT显示不全的问题
你提到部分字符串过大无法直接SELECT查看,这是SSMS的显示限制,不是数据本身的问题:
- 打开SSMS的「工具」→「选项」→「查询结果」→「SQL Server」→「结果到网格」,把「最大字符数」调整为更大的值(比如65535或直接选「最大值」),就能完整显示
NVARCHAR(MAX)的内容 - 或者切换到「结果到文本」模式,调整「每行最大字符数」即可,不需要转XML
不要用XML转回来处理
如果把XML再转回字符串,会带上<![CDATA[...]]>标签,反而破坏JSON结构,导致JSON函数报错,完全没必要这么做。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

