sqlserver 之 将查询结果变为json字符串
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字符串的更多相关文章
- JSON字符串与JS对象格式转换
JSON通常用于服务器向客户端传送数据,传回来的JSON数据是字符串的形式,所以要转变为JS对象形式才方便我们使用. JSON字符串转变为JS对象:JSON.parse( ); JS对象转变为JSON ...
- 1.部分(苹果)移动端的cookie不支持中文字符,2.从json字符串变为json对象时,只支持对象数组
1.移动端的cookie不支持中文字符.可以用编码,解码的方式解决. 2.json字符串变成相应 的,json对象数组字符串.就这样 3.不同客户端(移动端.电脑)的请求,在C#服务端的取时间的格式竟 ...
- 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 ...
- Excel催化剂开源第39波-json字符串解释的超能类库
对一般VBA开发群体来说,处理json.xml结构的数据源,在VB6的世界里,是一件非常不容易的事情,隐约记得当年自己从哪里找到了一个使用字典实现的json解释的函数,实在非常稀有. 在.Net的世界 ...
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
- 前台jquery+ajax+json传值,后台处理完后返回json字符串,如何取里面的属性值?(不用springmvc注解)
一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp& ...
- DataTable转Json字符串(使用Newtonsoft.Json.dll)
DataTable转Json字符串(使用Newtonsoft.Json.dll) 在需要把DataTable转为Json字符串时,自己手动拼接太麻烦,而且容易出错,费时费力,使用Newtonsoft. ...
- fastjson将json字符串转化成bean对象解析出错的检查方法
我的情况是:解析第一层数据成功,解析第二层嵌套的数据失败.如: { "response": { "resultcode": "0", &qu ...
- C# Winform反序列化复杂json字符串
最近接的私单是一个CS项目,里面所有的操作都是通过调用API接口来进行的. 接口详细说明 协议:https 请求方式:post https://xx.xxx.net/app/clients 提交j ...
随机推荐
- AndroidManifest.xml里加入不同package的component (Activity、Service里android:name里指定的值一般为句号加类名),可以通过指定完全类名(包名+类名)来解决
我们都知道对于多个Activity如果在同一个包中,在Mainfest中可以这样注册 <span style="font-size: small;"><?xml ...
- UEditor可以如何直接复制word的图文内容到编辑器中
如何做到 ueditor批量上传word图片? 1.前端引用代码 <!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 树形DP
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- ubuntu18.04-安装最新cmake
https://www.linuxidc.com/Linux/2018-09/154165.htm
- 整数解 (hdu 2092
整数解 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- ASP.NET MVC3.0 标签提交
[HttpPost] [ValidateInput(false)] public ActionResult UpdateInformationData(ITMovingData p_data) { p ...
- 使用iScroll时input复选框不能选中解决方法
http://blog.csdn.net/xw505501936/article/details/51886018
- Python网络爬虫-爬取微博热搜
微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url=https://s.weibo.com/top/summary?Refer=top_hot&topnav=1& ...
- HTML中margin与padding的区别!(转)
我们以DIV为一个盒子为例,既然和现实生活中的盒子一样,那我们想一下,生活中的盒子内部是不是空的好用来存放东西,而里面存放东西的区域我们给他起个名字叫“content(内容)”,而盒子的纸壁给他起个名 ...
- Vagrant 手册之 box - box 的信息格式
原文地址 创建 Vagrant 的 box 时,可以提供在运行 vagrant box list -i 时展示的与用户相关的其他信息.例如,可以打包 box,以包含有关该 box 的作者和网站信息: ...