PATH作为OPENJSON中的变量

时间:2017-02-20 09:56:38

标签: sql-server json function tsql

我想创建一个函数,只有当json-array不存在时才会为json-array增加值。我写了一个函数

CREATE FUNCTION dbo.JSON_ARRAY_APPEND (@json nvarchar(max), @arr nvarchar(max), @value nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    IF NOT EXISTS (SELECT * FROM OPENJSON(@json,@arr) WHERE [value] =  @value)
    SET @json=JSON_MODIFY(@json,'append '+@arr,@value)
    RETURN @json
END

但我收到了错误

  

消息102,级别15,状态1,过程JSON_ARRAY_APPEND,第5行[批处理   开始第6行]'@arr'附近的语法不正确。

我知道这是因为我将路径作为变量@arr

传递给OPENJSON

如何以正确的方式做到这一点?感谢

1 个答案:

答案 0 :(得分:1)

我这样做了

CREATE FUNCTION dbo.JSON_ARRAY_APPEND (@json nvarchar(max), @arr nvarchar(max), @value nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    IF NOT EXISTS (SELECT * FROM OPENJSON(@json) WHERE [value] =  @value AND  [key] = RIGHT(@arr,LEN(@arr)-2))
        SET @json = JSON_MODIFY(@json,'append '+@arr,@value)
    RETURN @json
END
GO