CREATE PROCEDURE[dbo].[WXSP_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]'

最新文章

  1. ASPNET 导出EXCEL表
  2. 学习图像算法阶段性总结 (附一键修图Demo) 2016.04.19更新demo
  3. python异步爬虫
  4. 07 concurrency and Multi-version
  5. Java同步块
  6. Ruby设计模式透析之 —— 适配器(Adapter)
  7. C# 异步和委托学习
  8. html5 中的SVG 和canvas
  9. CKEdit( htm编辑器)
  10. firewall服务配置
  11. python笔记18-高阶函数
  12. SQA
  13. 微软Azure AspNetCore微服务实战 第一期
  14. 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
  15. DataGuard----&gt;备库参数db_file_name_convert和log_file_name_convert的作用
  16. Ajax的课外了解
  17. IntelliJ IDEA 启动tomcat服务器报Error running &#39;Unnamed&#39;: Address localhost:1099 is already in use错误的问题
  18. Java Decompiler Plugin For Eclipse IDE
  19. Get started with ros -- 1
  20. 一个窗口里包含一个iframe,点击iframe内的submit按钮,返回的视图总是显示在iframe中,我想要的效果是点击按钮后返回的视图是在浏览器窗口中...?asp.net mvc 的action中,不用js怎么实现??????????

热门文章

  1. JS 验证
  2. Pycharm2019最新激活注册码(pycharm激活教程)
  3. ios 10 访问设置问题
  4. android 完全区分double-tap 与 singal-tap 的方法
  5. MVC、MTV、FBV、CBV、母版和继承:
  6. 基础知识 Asp.Net MVC EF各版本区别
  7. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)
  8. Nginx之负载均衡 :两台服务器均衡(填坑)
  9. numpy的一点学习
  10. MySQL UNSIGNED和ZEROFILL属性