很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些bug已被我修改了。
1.查询结果转XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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的存储过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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 = '<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; --//结束异常处理 END ; |
以上所述是小编给大家介绍的SqlServer将查询结果转换为XML和JSON,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!