小编Rol*_*rag的帖子

使用 case 语句时,SQL Server 2016 FOR JSON PATH 返回字符串而不是数组

我正在尝试使用 SQL Server 2016 构建一个包含数组的 JSON 对象。

数组的源数据本身就是 JSON,因此我在JSON_QUERYselect 语句内部使用,并将 FOR JSON 子句应用于该 select 语句。

一切都工作得很好,直到我将JSON_QUERY子句包装在CASE语句中(在某些情况下不得包含数组,即必须为空)。

下面的代码说明了这个问题:

declare  @projects nvarchar(max) = '{"projects": [23439658267415,166584258534050]}'
declare @id bigint = 123

SELECT 
      [data.array1] = JSON_QUERY(@projects, '$.projects') -- returns an array - perfect.
    , [data.array2] = CASE WHEN 1 is NOT NULL 
                           THEN JSON_QUERY(@projects, '$.projects') 
                           ELSE NULL END -- returns an array - still good!
    , [data.array3] = CASE WHEN @id is NOT NULL
                           THEN JSON_QUERY(@projects, '$.projects') 
                           ELSE …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server arrays json sql-server-2016

5
推荐指数
1
解决办法
3206
查看次数

标签 统计

arrays ×1

json ×1

sql-server ×1

sql-server-2016 ×1

t-sql ×1