在json过滤器上使用string_split

时间:2018-12-04 18:43:50

标签: json sql-server

我试图在我的string_split子句中使用where函数来拆分来自json过滤器的值并创建IN子句。查询应返回找到的值,否则返回所有内容。

过滤器:

DECLARE @Filter NVARCHAR(MAX)
SET @Filter=N'{
    "objectName": "Object2"
}'

如果仅指定一个objectName,以下查询将完全满足我的要求。

...
AND (c.objectName IS NULL AND JSON_VALUE(@Filter,N'$.objectName') IS NULL OR c.objectName= ISNULL(JSON_VALUE(@Filter,N'$.objectName'),c.objectName))

但是如果我将Filter更改为包含,个分隔的值:

SET @Filter=N'{
    "objectName": "Object1, Object2"
}'

并使用string_split函数读取这些值,这不像string_split子句中的where函数。我相信我的syntax是错的。

AND (c.objectName IS NULL AND JSON_VALUE(@Filter,N'$.objectName') IS NULL OR c.objectName IN 
string_split(ISNULL(JSON_VALUE(@Filter,N'$.objectName'),c.objectName), ','))

是否需要先将json_value强制转换为varchar

1 个答案:

答案 0 :(得分:1)

我无法测试,但是,这可能(可能)为您提供所追求的目标:

  AND (c.objectName IS NULL
  AND  JSON_VALUE(@Filter,N'$.objectName') IS NULL 
   OR  c.objectName IN (SELECT value FROM STRING_SPLIT(ISNULL(JSON_VALUE(@Filter,N'$.objectName'),c.objectName), ',')))

就像我上面所说的,STRING_SPLIT是一个TVF,您不能只在WHERE中引用它。它必须在子查询中,或者在您的FROM子句中。