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. 华为RH2288V3服务器部署指南

    一.配置好局域网 首先配置好局域网,将电脑和服务器通过网线直连,服务器默认IP192.168.2.100,因此电脑本地的IP需要设置一下改为和服务器同一网段: 二.登录导控制页面 浏览器中输入服务器的 ...

  2. C#使用phantomjs 进行网页整页截屏

    C#使用phantomjs 进行网页整页截屏 hantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,这样访问网页就省去了浏览器的界面绘制所消耗的系统资源,比较适合用 ...

  3. [design pattern](0) 概述

    一 引语 大家好,这是我第一次在网上写文章.从学校毕业一年多,感觉还有很多东西需要去学习.最近正在学习设计模式,希望可以在博客园把我学习的知识记录下来,能够和大家一起讨论设计模式相关的话题,也希望这个 ...

  4. (转)基于TLS证书手动部署kubernetes集群(上)

    转:https://www.cnblogs.com/wdliu/archive/2018/06/06/9147346.html 一.简介 Kubernetes是Google在2014年6月开源的一个容 ...

  5. 微信小程序的事件

    事件,视图层到逻辑层的一种通讯方式,或者将用户的行为返回到逻辑层,当我们在组件绑定事件之后,当我们触发事件,就会执行逻辑层绑定的事件,处理回调函数,当页面的事件触发之后 页面上元素一些额外事件,通过事 ...

  6. HDU6668 Polynomial(模拟)

    HDU6668 Polynomial 顺序遍历找出最高次幂项的系数 分三种情况 \(1/0\).\(0/1\).\(f(x)/g(x)\) . 复杂度为 \(O(n)\) . #include< ...

  7. ORA-02298问题处理

    参考:http://blog.163.com/yvtong@126/blog/static/8753524720132223343722/ ORA-39083: Object type REF_CON ...

  8. MySQL分组聚合group_concat + substr_index

    场景:给予一张商品售卖表,表中数据为商品的售卖记录,假设表中数据是定时脚本插入的,每个时间段的商品售卖数量不同,根据此表找各个商品的最多售卖数量的数据. 1.数据表 CREATE TABLE `goo ...

  9. P2158仪仗队

    今天早上你谷崩了 由于脑子抽筋,所以选了一道数学题来做.做着做着就疯了 传送 窝盟先画张图冷静冷静 这是样例的图,其中蓝点是有学生的地方. 窝盟来看一下那些学生可以被C君看到. 假设这张图是一个坐标系 ...

  10. PHP-会话技术

    B/S 请求响应模式是无状态的.任意的请求间不存在任何的联系,不能将请求状态保持下去. 会话技术可以给每个浏览器分配持久数据,这些数据不会随着一次请求和相应结束而销毁. COOKIE cookie 是 ...