如何用T-SQL的FOR JSON PATH返回无列名的纯值数组?
在SQL中返回不含列名的纯值数组的方法
你可以通过以下几种方式在T-SQL中生成纯值组成的JSON数组,替代默认返回的带键对象数组:
方法1:利用STRING_AGG直接拼接数组(适用于SQL Server 2017+)
对于数值类型的列,直接用STRING_AGG拼接值,再手动包裹数组符号即可:
CREATE TABLE #data ( id int ); INSERT INTO #data VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); -- 生成纯数值数组 SELECT CONCAT('[', STRING_AGG(id, ','), ']') AS pure_value_array FROM #data; DROP TABLE #data
执行后会返回:
[1,2,3,4,5,6,7,8,9,10]
如果是字符串类型的列,需要处理引号和JSON转义,避免格式错误:
-- 示例:字符串列的处理 CREATE TABLE #string_data ( content nvarchar(50) ); INSERT INTO #string_data VALUES ('foo'), ('bar"baz'), ('test\nline'); SELECT '[' + STRING_AGG(JSON_QUERY('"' + STRING_ESCAPE(content, 'json') + '"'), ',') + ']' AS pure_string_array FROM #string_data; DROP TABLE #string_data
方法2:结合FOR JSON PATH的特性生成
通过将列名指定为空字符串,配合WITHOUT_ARRAY_WRAPPER去掉默认的对象外层,再用STRING_AGG拼接成数组:
CREATE TABLE #data ( id int ); INSERT INTO #data VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); SELECT '[' + STRING_AGG((SELECT id AS '' FOR JSON PATH, WITHOUT_ARRAY_WRAPPER), ',') + ']' AS pure_value_array FROM #data; DROP TABLE #data
这种方式的优势是自动适配不同数据类型的JSON格式转换,无需手动处理转义。
内容的提问来源于stack exchange,提问作者Chris Ward
相关产品推荐
相关产品推荐

