架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 402|回复: 2

[资料] SQL Server中将查询结果转换为Json格式脚本分享

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-26 17:35:27
zu
脚本源码:

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. CREATE PROCEDURE[dbo].[SerializeJSON](
  6. @ParameterSQL AS VARCHAR(MAX)
  7. )
  8. AS
  9. BEGIN
  10.   
  11. DECLARE @SQL NVARCHAR(MAX)
  12. DECLARE @XMLString VARCHAR(MAX)
  13. DECLARE @XML XML
  14. DECLARE @Paramlist NVARCHAR(1000)
  15. SET @Paramlist = N'@XML XML OUTPUT'
  16. SET @SQL = 'WITH PrepareTable (XMLString)'
  17. SET @SQL = @SQL + 'AS('
  18. SET @SQL = @SQL + @ParameterSQL+ 'FOR XML RAW,TYPE,ELEMENTS'
  19. SET @SQL = @SQL + ')'
  20. SET @SQL = @SQL + 'SELECT @XML=[XMLString]FROM[PrepareTable]'
  21. EXEC sp_executesql @SQL, @Paramlist, @XML=@XML OUTPUT
  22. SET @XMLString=CAST(@XML AS VARCHAR(MAX))
  23.   
  24. DECLARE @JSON VARCHAR(MAX)
  25. DECLARE @Row VARCHAR(MAX)
  26. DECLARE @RowStart INT
  27. DECLARE @RowEnd INT
  28. DECLARE @FieldStart INT
  29. DECLARE @FieldEnd INT
  30. DECLARE @KEY VARCHAR(MAX)
  31. DECLARE [url=home.php?mod=space&uid=10470]@value[/url] VARCHAR(MAX)
  32.   
  33. DECLARE @StartRoot VARCHAR(100);SET @StartRoot='<row>'
  34. DECLARE @EndRoot VARCHAR(100);SET @EndRoot='</row>'
  35. DECLARE @StartField VARCHAR(100);SET @StartField='<'
  36. DECLARE @EndField VARCHAR(100);SET @EndField='>'
  37.   
  38. SET @RowStart=CharIndex(@StartRoot,@XMLString,0)
  39. SET @JSON=''
  40. WHILE @RowStart>0
  41. BEGIN
  42.     SET @RowStart=@RowStart+Len(@StartRoot)
  43.     SET @RowEnd=CharIndex(@EndRoot,@XMLString,@RowStart)
  44.     SET @Row=SubString(@XMLString,@RowStart,@RowEnd-@RowStart)
  45.     SET @JSON=@JSON+'{'
  46.   
  47.     -- for each row
  48.     SET @FieldStart=CharIndex(@StartField,@Row,0)
  49.     WHILE @FieldStart>0
  50.     BEGIN
  51.         -- parse node key
  52.         SET @FieldStart=@FieldStart+Len(@StartField)
  53.         SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)
  54.         SET @KEY=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)
  55.         SET @JSON=@JSON+'"'+@KEY+'":'
  56.         -- parse node value
  57.         SET @FieldStart=@FieldEnd+1
  58.         SET @FieldEnd=CharIndex('</',@Row,@FieldStart)
  59.         SET @Value=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)
  60.         SET @JSON=@JSON+'"'+@Value+'",'
  61.   
  62.         SET @FieldStart=@FieldStart+Len(@StartField)
  63.         SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)
  64.         SET @FieldStart=CharIndex(@StartField,@Row,@FieldEnd)
  65.     END   
  66.     IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
  67.     SET @JSON=@JSON+'},'
  68.     --/ for each row
  69.   
  70.     SET @RowStart=CharIndex(@StartRoot,@XMLString,@RowEnd)
  71. END
  72. IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
  73. SET @JSON='['+@JSON+']'
  74. SELECT @JSON
  75.   
  76. END
  77. GO
复制代码
使用方法:

  1. EXEC[SerializeJSON]'SELECT *FROM [itsvse].[dbo].[Deploy_District]';
复制代码





上一篇:MySQL利用mysqldump带条件导出数据
下一篇:分享大数据常用算法(应用)
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
沙发
发表于 2019-4-26 17:36:28
这个好
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

板凳
发表于 2019-4-28 15:59:51
这个好不错不错
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-9-19 02:25

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表