很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些bug已被我修改了。
1.查询结果转XML
rush:sql;">
DECLARE @Parametersql NVARCHAR(MAX)='SELECT * FROM table';
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))
SELECT @XML;
SELECT @XMLString;
其中@Parametersql为要查询的语句,@XMLXML格式数据,@XMLStringXML转成字符串
2.查询结果转JSON
查询结果转换成json需要经过两个步骤,首先将查询结果转成XML数据,然后通过XML数据转成json
XML转JSON的存储过程如下:
rush:sql;">
CREATE PROCEDURE [dbo].[SerializeJSON] (
@XML XML,@json_xml NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
DECLARE @XMLString NVARCHAR(MAX);
SET @XMLString = CAST(@XML AS 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 = '';
DECLARE @EndRoot VARCHAR(100);
SET @EndRoot = '
';
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,@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,@FieldStart);
DECLARE @end INT = CHARINDEX('/>',@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('',@FieldStart);
SET @Value = SUBSTRING(@Row,@FieldEnd - @FieldStart);
SET @JSON = @JSON + '"' + @Value + '",';
END;
SET @FieldStart = @FieldStart + LEN(@StartField);
SET @FieldEnd = CHARINDEX(@EndField,@FieldStart);
SET @FieldStart = CHARINDEX(@StartField,@FieldEnd);
END;
IF LEN(@JSON)>0
SET @JSON = SUBSTRING(@JSON,LEN(@JSON));
SET @JSON = @JSON + '},';
--// for each row
SET @RowStart = CHARINDEX(@StartRoot,@RowEnd);
END;
IF LEN(@JSON)>0
SET @JSON = SUBSTRING(@JSON,LEN(@JSON));
--//SET @JSON = '[' + @JSON + ']';
SET @json_xml = @JSON;
END TRY--//结束捕捉异常
BEGIN CATCH--//有异常被捕获
SET @json_xml = @XMLString;
END CATCH;--//结束异常处理
END;
以上所述是小编给大家介绍的sqlServer将查询结果转换为XML和JSON,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程之家网站的支持!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。