2017-07-31 46 views
0

这是我的表和数据的SQL Server 2016 JSON结果结构阵列

enter image description here

我的查询:

SELECT [Name] 
    FROM [TestDB].[dbo].[MyCategory] 
WHERE [Category] = 'A' 
    FOR JSON AUTO 

结果:

[ 
    {"Name": "John"}, 
    {"Name": "Mary"}, 
    {"Name": "Dick"} 
] 

但我想结果如:

["John", "Mary", "Dick"] 
+0

看Magne Rekdal的答案在这里:https://stackoverflow.com/questions/37708638/sql-to-json-array-of-object s-to-array-of-values-in-sql-2016 – Santiago

回答

0
declare @stra varchar (200) 
set @stra = '' 

select top 5 @stra = 
    case when @stra = '' 
    then '["'+ Name 
    else @stra + coalesce('","' + Name, '') 
    end 
    from [TestDB].[dbo].[MyCategory] 

    set @stra= @stra +'"]' 
print @stra 
+1

'SELECT @v = @v + ...'可能是未定义的,它不是字符串连接的安全方法。 – lad2025

0

我不认为这JSON格式在FOR JSON条款的支持,看到this article,虽然串["John","Mary","Dick"]使用ISJSON功能被认为是有效的JSON。

你唯一的办法很可能是自己修改的输出是这样的:

SET NOCOUNT ON 

DECLARE @MyCategory TABLE (ID int , Category char(1), [Name] varchar(50)) 

INSERT INTO @MyCategory VALUES (1, 'A', 'John') 
INSERT INTO @MyCategory VALUES (2, 'A', 'Mary') 
INSERT INTO @MyCategory VALUES (3, 'A', 'Dick') 
INSERT INTO @MyCategory VALUES (4, 'B', 'Sam') 

DECLARE @MyJSON varchar(max) 
SELECT @MyJSON = 
REPLACE(
REPLACE(
(
SELECT [Name] AS ReplaceMe 
    FROM @MyCategory 
WHERE [Category] = 'A' 
    FOR JSON AUTO 
    ), '{"ReplaceMe":','' 
    ) , '}','') 

PRINT @MyJSON 
PRINT ISJSON(@MyJSON) 

输出到:

["John","Mary","Dick"] 
1