zoukankan      html  css  js  c++  java
  • 将SQL Server表数据,转换为JSON格式

    创建存储过程:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE[dbo].[SerializeJSON](
    @ParameterSQL AS VARCHAR(MAX)
    )
    AS
    BEGIN
      
    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))
      
    DECLARE @JSON VARCHAR(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)
            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+'",'
      
            SET @FieldStart=@FieldStart+Len(@StartField)
            SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)
            SET @FieldStart=CharIndex(@StartField,@Row,@FieldEnd)
        END   
        IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
        SET @JSON=@JSON+'},'
        --/ for each row
      
        SET @RowStart=CharIndex(@StartRoot,@XMLString,@RowEnd)
    END
    IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
    SET @JSON='['+@JSON+']'
    SELECT @JSON
      
    END
    GO

    调用存储过程:

    EXEC[SerializeJSON] 'SELECT * FROM [dbo].[TEST]'

    返回结果就是JSON格式的数据了。

  • 相关阅读:
    Kubernetes 升级过程记录:从 1.17.0 升级至最新版 1.20.2
    歼10:职业有个基本属性,为了糊口。然后再区分 主动 or 被动,被动者只是为了糊口,那自然是看不起自己的职业
    红胖子:写给人生的九封信,愿你的人生淡定从容,繁华似锦!!!
    Embarcadero MVP(68位,全部都有个人主页)
    Delphi 26 岁
    C# Assembly 与 Reflection
    你精通那么多技术,为何还是做不好一个项目
    Linux 6 个“吓人”的 命令
    Distributed Application runtime
    RocketMQ and kafka
  • 原文地址:https://www.cnblogs.com/zmsoftbj/p/11840557.html
Copyright © 2011-2022 走看看