参考这篇博客造数据
https://blog.csdn.net/qq_33556442/article/details/82149722
普通写法
SELECT '['+ STUFF((SELECT TOP 2 ',{"OrderGuid": "' + CONVERT(varchar(36),OrderGuid,36)+
'","ProductName": "' + ProductName +
'"}' FROM OrderProduct
FOR XML PATH('')), 1, 1,''
)
+ ']'[ProductDetail]
直接输出写法
DECLARE @content VARCHAR(MAX)
SET @content = (SELECT '['+ STUFF((SELECT TOP 2 ',{"OrderGuid": "' + CONVERT(varchar(36),OrderGuid,36)+
'","ProductName": "' + ProductName +
'"}' FROM OrderProduct
FOR XML PATH('')), 1, 1,''
)
+ ']'[ProductDetail])
PRINT @content
函数写法
CREATE FUNCTION funSuttfJson
(
)
RETURNS varchar(2000)
AS
BEGIN
DECLARE @ReturnValue VARCHAR(MAX)
SET @ReturnValue = (SELECT '['+ STUFF((SELECT TOP 2 ',{"OrderGuid": "' + CONVERT(varchar(36),OrderGuid,36)+
'","ProductName": "' + ProductName +
'"}' FROM OrderProduct
FOR XML PATH('')), 1, 1,''
)
+ ']'[ProductDetail])
RETURN @ReturnValue
END
存储过程写法
CREATE PROCEDURE Pro_SuttfJson
@SuttfJson varchar(2000) output
AS
BEGIN
select @SuttfJson= (SELECT '['+ STUFF((SELECT TOP 2 ',{"OrderGuid": "' + CONVERT(varchar(36),OrderGuid,36)+
'","ProductName": "' + ProductName +
'"}' FROM OrderProduct
FOR XML PATH('')), 1, 1,''
)
+ ']'[ProductDetail])
END
GO
declare @SuttfJson varchar(2000)
EXEC Pro_SuttfJson @SuttfJson output
PRINT @SuttfJson
注意事项
蓝色部分不能折行,一旦折行查询就得不到预期的结果,如下图就折行了:
解决办法
1、在 FOR XML PATH('')后面加,TYPE).value('.', 'NVARCHAR(MAX)'
我们来看一个简单的例子
要解决这个问题可以使用以下办法来解决