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. 两个list 合并后去除掉重复removeAll()的,然后再随机获取最后list中的 几个值

    public static void test1(){ String s1="1,2,5,3,6,9"; String n1[]=s1.split(","); ...

  2. Jmeter的JDBC请求执行多条SQL语句

    注:有mysqlconnector/j 3.1.1以上版本才支持执行多条sql语句 1.     下载jdbc驱动为了连接Mysql数据库,还需要有个jdbc驱动:mysql-connector-ja ...

  3. php compact()函数 语法

    php compact()函数 语法 作用:创建包含变量名和它们的值的数组.大理石构件哪家好 语法:compact(var1,var2...) 参数: 参数 描述 var1 必需.可以是带有变量名的字 ...

  4. JavaScript 常用的技术(陆续更新)

    截取字符串(指定长度) var str = "abc-110001"; //str.substring(起始位置(0开始),截取的长度) str.substring(0,4); / ...

  5. [CSP-S模拟测试]:Tree(贪心)

    题目描述 给定一颗$n$个点的树,树边带权,试求一个排列$P$,使下式的值最大 $$\sum \limits_{i=1}^{n-1}maxflow(P_i,P_{i+1})$$ 其中$maxflow( ...

  6. Linux shell 归纳之 cp

    1. 复制文件夹folder1(包括所有子文件夹和文件), 并命名为folder2 # cp -r /usr/folder1 folder2 2. 复制文件file1 到它的上一级的目录的abc文件夹 ...

  7. 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文自动机)

    https://ac.nowcoder.com/acm/contest/886/C 题意: 给出一个串A , 集合S里面为A串的回文字串 , 现在在集合S里面找出多少对(a,b),b为a的字串 分析: ...

  8. php面试专题---Mysql索引类型、介绍及优点

    php面试专题---Mysql索引类型.介绍及优点 一.总结 一句话总结: 精品视频讲解里面的资料来源也是通过各种资料,比如博客.书等,只不过是基于讲解者的知识体系有整理的过程 1.B-Tree索引三 ...

  9. pve之daemon

    pmxcfs The Proxmox Cluster file system (“pmxcfs”) is a database-driven file system for storing confi ...

  10. vuejs基础-style样式

    在Vue中使用样式 使用class样式 数组 <h1 :class="['red', 'thin']">这是一个邪恶的H1</h1> 数组中使用三元表达式 ...