SqlServer将查询结果转换为XML和JSON
发布时间 - 2026-01-11 02:13:20 点击率:次很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些bug已被我修改了。

1.查询结果转XML
DECLARE @ParameterSQL NVARCHAR(MAX)='SELECT * FROM table'; DECLARE @SQL NVARCHAR(MAX) DECLARE @XMLString VARCHAR(MAX) DECLARE @XML XML DECLARE @Paramlist NVARCHAR(1000) SET @Paramlist = N'@XML XML OUTPUT' SET @SQL = 'WITH PrepareTable (XMLString)' SET @SQL = @SQL + 'AS( ' SET @SQL = @SQL + @ParameterSQL+ ' FOR XML RAW,TYPE,ELEMENTS' SET @SQL = @SQL + ')' SET @SQL = @SQL + 'SELECT @XML=[XMLString]FROM[PrepareTable]' EXEC sp_executesql @SQL, @Paramlist, @XML=@XML OUTPUT SET @XMLString=CAST(@XML AS VARCHAR(MAX)) SELECT @XML; SELECT @XMLString;
其中@ParameterSQL为要查询的语句,@XMLXML格式数据,@XMLStringXML转成字符串
2.查询结果转JSON
查询结果转换成json需要经过两个步骤,首先将查询结果转成XML数据,然后通过XML数据转成json
XML转JSON的存储过程如下:
CREATE PROCEDURE [dbo].[SerializeJSON] (
@XML XML,
@json_xml NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
DECLARE @XMLString NVARCHAR(MAX);
SET @XMLString = CAST(@XML AS NVARCHAR(MAX));
BEGIN TRY--//开始捕捉异常
DECLARE @JSON NVARCHAR(MAX);
DECLARE @Row VARCHAR(MAX);
DECLARE @RowStart INT;
DECLARE @RowEnd INT;
DECLARE @FieldStart INT;
DECLARE @FieldEnd INT;
DECLARE @KEY VARCHAR(MAX);
DECLARE @Value VARCHAR(MAX);
DECLARE @StartRoot VARCHAR(100);
SET @StartRoot = '<row>';
DECLARE @EndRoot VARCHAR(100);
SET @EndRoot = '</row>';
DECLARE @StartField VARCHAR(100);
SET @StartField = '<';
DECLARE @EndField VARCHAR(100);
SET @EndField = '>';
SET @RowStart = CHARINDEX(@StartRoot, @XMLString, 0);
SET @JSON = '';
WHILE @RowStart>0
BEGIN
SET @RowStart = @RowStart + LEN(@StartRoot);
SET @RowEnd = CHARINDEX(@EndRoot, @XMLString, @RowStart);
SET @Row = SUBSTRING(@XMLString, @RowStart, @RowEnd - @RowStart);
SET @JSON = @JSON + '{';
--//for each row
SET @FieldStart = CHARINDEX(@StartField, @Row, 0);
WHILE @FieldStart>0
BEGIN
--//parse node key
SET @FieldStart = @FieldStart + LEN(@StartField);
SET @FieldEnd = CHARINDEX(@EndField, @Row, @FieldStart);
DECLARE @end INT = CHARINDEX('/>', @Row, @FieldStart);
IF @end<1
OR @end>@FieldEnd
BEGIN
SET @KEY = SUBSTRING(@Row, @FieldStart, @FieldEnd - @FieldStart);
SET @JSON = @JSON + '"' + @KEY + '":';
--//parse node value
SET @FieldStart = @FieldEnd + 1;
SET @FieldEnd = CHARINDEX('</', @Row, @FieldStart);
SET @Value = SUBSTRING(@Row, @FieldStart, @FieldEnd - @FieldStart);
SET @JSON = @JSON + '"' + @Value + '",';
END;
SET @FieldStart = @FieldStart + LEN(@StartField);
SET @FieldEnd = CHARINDEX(@EndField, @Row, @FieldStart);
SET @FieldStart = CHARINDEX(@StartField, @Row, @FieldEnd);
END;
IF LEN(@JSON)>0
SET @JSON = SUBSTRING(@JSON, 0, LEN(@JSON));
SET @JSON = @JSON + '},';
--// for each row
SET @RowStart = CHARINDEX(@StartRoot, @XMLString, @RowEnd);
END;
IF LEN(@JSON)>0
SET @JSON = SUBSTRING(@JSON, 0, LEN(@JSON));
--//SET @JSON = '[' + @JSON + ']';
SET @json_xml = @JSON;
END TRY--//结束捕捉异常
BEGIN CATCH--//有异常被捕获
SET @json_xml = @XMLString;
END CATCH;--//结束异常处理
END;
以上所述是小编给大家介绍的SqlServer将查询结果转换为XML和JSON,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# sql查询结果转换
# sql
# 结果转xml和json
# SQL Server中将查询结果转换为Json格式脚本分享
# SQLServer中JSON文档型数据的查询问题解决
# 查询结果
# 转成
# 小编
# 在这
# 在此
# 已被
# 很久
# 给大家
# 转换成
# 转换为
# 所述
# 给我留言
# 感谢大家
# 存储过程
# 疑问请
# 有任何
# 网上
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何彻底卸载建站之星软件?
用v-html解决Vue.js渲染中html标签不被解析的问题
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel怎么实现模型属性的自动加密
Laravel怎么上传文件_Laravel图片上传及存储配置
如何快速搭建高效WAP手机网站吸引移动用户?
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
中山网站推广排名,中山信息港登录入口?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
高防服务器如何保障网站安全无虞?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
JavaScript常见的五种数组去重的方式
历史网站制作软件,华为如何找回被删除的网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
javascript中对象的定义、使用以及对象和原型链操作小结
详解CentOS6.5 安装 MySQL5.1.71的方法
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何实现用户注册和登录?(Auth脚手架指南)
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
北京企业网站设计制作公司,北京铁路集团官方网站?
使用spring连接及操作mongodb3.0实例
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何注册花生壳免费域名并搭建个人网站?
php结合redis实现高并发下的抢购、秒杀功能的实例
Python3.6正式版新特性预览
b2c电商网站制作流程,b2c水平综合的电商平台?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
浅谈Javascript中的Label语句
如何在阿里云虚拟主机上快速搭建个人网站?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Laravel如何处理文件下载请求?(Response示例)
网易LOFTER官网链接 老福特网页版登录地址
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
如何挑选最适合建站的高性能VPS主机?
上一篇:CentOS中如何管理虚拟主机
上一篇:CentOS中如何管理虚拟主机

