SqlServer将查询结果转换为XML和JSON

很久之前用到的,现在整理在这,里面一些代码来源于网上,不过有些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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

本文链接:https://my.lmcjl.com/post/11935.html

展开阅读全文

4 评论

留下您的评论.