我试图在我的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
?
答案 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
子句中。