GO
/****** Object: StoredProcedure [dbo].[SerializeJSON] Script Date: 6/4/2019 3:58:23 PM
将查询结果变为json字符串
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SerializeJSON] (
@ParameterSQL NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
DECLARE @XMLString VARCHAR(MAX)
DECLARE @XML XML
DECLARE @Paramlist NVARCHAR()
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_xml 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();
SET @StartRoot = '<row>';
DECLARE @EndRoot VARCHAR();
SET @EndRoot = '</row>';
DECLARE @StartField VARCHAR();
SET @StartField = '<';
DECLARE @EndField VARCHAR();
SET @EndField = '>';
SET @RowStart = CHARINDEX(@StartRoot, @XMLString, );
SET @JSON = '';
WHILE @RowStart>
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, );
WHILE @FieldStart>
BEGIN
--//parse node key
SET @FieldStart = @FieldStart + LEN(@StartField);
SET @FieldEnd = CHARINDEX(@EndField, @Row, @FieldStart);
DECLARE @end INT = CHARINDEX('/>', @Row, @FieldStart);
IF @end<
OR @end>@FieldEnd
BEGIN
SET @KEY = SUBSTRING(@Row, @FieldStart, @FieldEnd - @FieldStart);
SET @JSON = @JSON + '"' + @KEY + '":';
--//parse node value
SET @FieldStart = @FieldEnd + ;
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)>
SET @JSON = SUBSTRING(@JSON, , LEN(@JSON));
SET @JSON = @JSON + '},';
--// for each row
SET @RowStart = CHARINDEX(@StartRoot, @XMLString, @RowEnd);
END;
IF LEN(@JSON)>
SET @JSON = SUBSTRING(@JSON, , LEN(@JSON));
SET @JSON = '[' + @JSON + ']';
SET @json_xml = @JSON;
END TRY--//结束捕捉异常
BEGIN CATCH--//有异常被捕获
SET @json_xml = @XMLString;
END CATCH;--//结束异常处理
select @json_xml as result_json;
END;

USE [EMRWS]GO/****** Object:  StoredProcedure [dbo].[SerializeJSON]    Script Date: 6/4/2019 3:58:23 PM将查询结果变为json字符串 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[SerializeJSON] (   @ParameterSQL NVARCHAR(MAX)  )ASBEGINDECLARE @SQL NVARCHAR(MAX)DECLARE @XMLString VARCHAR(MAX)DECLARE @XML XMLDECLARE @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 OUTPUTSET @XMLString=CAST(@XML AS VARCHAR(MAX))
  DECLARE @json_xml 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;--//结束异常处理  select @json_xml as result_json;END;

sqlserver 之 将查询结果变为json字符串的更多相关文章

  1. JSON字符串与JS对象格式转换

    JSON通常用于服务器向客户端传送数据,传回来的JSON数据是字符串的形式,所以要转变为JS对象形式才方便我们使用. JSON字符串转变为JS对象:JSON.parse( ); JS对象转变为JSON ...

  2. 1.部分(苹果)移动端的cookie不支持中文字符,2.从json字符串变为json对象时,只支持对象数组

    1.移动端的cookie不支持中文字符.可以用编码,解码的方式解决. 2.json字符串变成相应 的,json对象数组字符串.就这样 3.不同客户端(移动端.电脑)的请求,在C#服务端的取时间的格式竟 ...

  3. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  4. Excel催化剂开源第39波-json字符串解释的超能类库

    对一般VBA开发群体来说,处理json.xml结构的数据源,在VB6的世界里,是一件非常不容易的事情,隐约记得当年自己从哪里找到了一个使用字典实现的json解释的函数,实在非常稀有. 在.Net的世界 ...

  5. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  6. 前台jquery+ajax+json传值,后台处理完后返回json字符串,如何取里面的属性值?(不用springmvc注解)

    一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp& ...

  7. DataTable转Json字符串(使用Newtonsoft.Json.dll)

    DataTable转Json字符串(使用Newtonsoft.Json.dll) 在需要把DataTable转为Json字符串时,自己手动拼接太麻烦,而且容易出错,费时费力,使用Newtonsoft. ...

  8. fastjson将json字符串转化成bean对象解析出错的检查方法

    我的情况是:解析第一层数据成功,解析第二层嵌套的数据失败.如: { "response": { "resultcode": "0", &qu ...

  9. C# Winform反序列化复杂json字符串

    最近接的私单是一个CS项目,里面所有的操作都是通过调用API接口来进行的. 接口详细说明 协议:https  请求方式:post  https://xx.xxx.net/app/clients 提交j ...

随机推荐

  1. ModelViewSet的用法

  2. 阿里云E-HPC联合安世亚太、联科集团共建云超算生态

    5月23日,2018云栖大会武汉峰会,阿里云高级技术专家刘峥和张维,对弹性计算最新上线的 serverless (无服务器化)计算技术Bazaar及基于该技术的容器服务产品 Severless Kub ...

  3. OC + RAC (十) 常用宏

    . RAC(TARGET, [KEYPATH, [NIL_VALUE]]) :用于给某个对象的某个属性绑定. // 只要文本框文字改变,就会修改label的文字 RAC(self.labelView, ...

  4. redis学习一 String数据类型

    一:概述 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的 ...

  5. php implode()函数 语法

    php implode()函数 语法 作用:把数组元素组合为字符串惠州大理石平板 语法:implode(separator,array) 参数: 参数 描述 separator     可选.规定数组 ...

  6. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  7. Gym - 101194H Great Cells

    Problem H. Great Cells 题目链接:https://codeforces.com/gym/101194/attachments Input file: Standard Input ...

  8. Solr添加文档(XML)

    在上一章中,我们学习解释了如何向Solr中添加JSON和.CSV文件格式的数据.在本章中,将演示如何使用XML文档格式在Apache Solr索引中添加数据. 示例数据 假设我们需要使用XML文件格式 ...

  9. php面试专题---9、会话控制考点

    php面试专题---9.会话控制考点 一.总结 一句话总结: 面向对象.设计模式这些特别好用,需要融会贯通 1.请写出PHP类权限控制修饰符? public.protected.private 2.p ...

  10. 生产环境下,oracle不同用户间的数据迁移。第一部分

    :任务名称:生产环境下schema ELON数据迁移至schema TIAN ######################################## 测试一:测试参数 数据泵数据导出:exp ...