sql 转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[Employee_TBL]'

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang