栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 数据库 > MySQL > MsSql

SqlServer将查询结果转换为XML和JSON

MsSql 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SqlServer将查询结果转换为XML和JSON

很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些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 = '';
    DECLARE @EndRoot VARCHAr(100);
    SET @EndRoot = '';
    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('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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/168941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号