使用 OPENJSON 查询时,结果集会模仿 JSON 数组的顺序还是随机顺序?
When querying using OPENJSON, will the result set mimic the order of the JSON array or will the order be random?
假设我有这个 JSON 数组:
[{
"Field": "1"
}, {
"Field": "2"
}, {
"Field": "3"
}]
我在 SQL 服务器的 OpenJSON
查询中使用它。
查询结果集会不会一直和数组顺序一样:
Field
1
2
3
或者它会像任何正常的 Select 查询一样随机吗?
如果 JSON 数组和 OPENJSON()
使用默认模式调用,基于 documentation,结果是 table,列 key
, value
和 type
以及 key
列保存指定数组中元素的索引。如果你想得到一个有序集,你应该使用如下语句:
DECLARE @json nvarchar(max) = N'[{ "Field": "1" }, { "Field": "2" }, { "Field": "3" }]'
SELECT [value]
FROM OPENJSON(@json)
ORDER BY CONVERT(int, [key])
-- or
SELECT c.Field
FROM OPENJSON(@json) j
CROSS APPLY OPENJSON(j.[value]) WITH (Field int '$.Field') c
ORDER BY CONVERT(int, j.[key])
假设我有这个 JSON 数组:
[{
"Field": "1"
}, {
"Field": "2"
}, {
"Field": "3"
}]
我在 SQL 服务器的 OpenJSON
查询中使用它。
查询结果集会不会一直和数组顺序一样:
Field
1
2
3
或者它会像任何正常的 Select 查询一样随机吗?
如果 JSON 数组和 OPENJSON()
使用默认模式调用,基于 documentation,结果是 table,列 key
, value
和 type
以及 key
列保存指定数组中元素的索引。如果你想得到一个有序集,你应该使用如下语句:
DECLARE @json nvarchar(max) = N'[{ "Field": "1" }, { "Field": "2" }, { "Field": "3" }]'
SELECT [value]
FROM OPENJSON(@json)
ORDER BY CONVERT(int, [key])
-- or
SELECT c.Field
FROM OPENJSON(@json) j
CROSS APPLY OPENJSON(j.[value]) WITH (Field int '$.Field') c
ORDER BY CONVERT(int, j.[key])