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主机?