• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 = '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 @end1
              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 Server中将查询结果转换为Json格式脚本分享
    • SQLServer中JSON文档型数据的查询问题解决
    上一篇:SQL Server Alwayson添加监听器失败的解决方法
    下一篇:MSSQL批量插入数据优化详细
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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