我有一个 SQL Server 表,其中有一个 NVARCHAR(MAX) NOT NULL
列,默认值为空字符串。检查约束检查内容是否为有效的 JSON(如果它不为 null 或空字符串):
CHECK ((ISNULL(ISJSON(NULLIF([MyJSONColumn],'')), (1)) = (1)
如果列已包含一些 JSON,例如以下内容:
["This is some original stuff"]
然后我可以使用 JSON_MODIFY
附加到它。
例如,这有效:
UPDATE t
SET t.MyJSONColumn = JSON_MODIFY(t.MyJSONColumn, 'append $', '"This is some appended stuff."')
FROM dbo.MyTable t
WHERE t.PrimaryKey = 1
如果我从表中选择:
SELECT MyJsonColumn
FROM dbo.MyTable
WHERE PrimaryKey = 1
我得到了附加的 JSON,如下所示:
["This is some original stuff","This is some appended stuff."]
一切都很好。但是,如果我在列为空字符串时尝试完全相同的 JSON_MODIFY
更新,则会收到此错误:
JSON text is not properly formatted. Unexpected character '.' is found at position 0.
我最初设置空白 MyJSONColumn
值的唯一方法是执行类似的操作。这可行,但当然非常难看:
UPDATE t
SET t.MyJSONColumn = '["This is some stuff."]')
在列中获得初始值后,我可以使用 JSON_MODIFY
附加到它。
我可以使用 JSON_MODIFY
来设置该初始值吗?我尝试添加“lax”修饰符,但仍然收到错误(即“append lax $”)。
最佳答案
我建议更改列的默认值,因为空字符串不是有效的 JSON。因此,当您将其作为第一个参数传递给 JSON_MODIFY()
函数时,可以预见的是,它会不同意。
根据您的需要,它可能是根数组:
declare @s nvarchar(max) = '[]';
set @s = JSON_MODIFY(@s, 'append $', N'This is some appended stuff.');
select @s;
或更详细(但可扩展)的结构:
declare @s nvarchar(max) = '{ "Values" : [] }';
set @s = JSON_MODIFY(@s, 'append $.Values', N'This is some appended stuff.');
select @s;
附注作为值的一部分传递的双引号会被转义;如果您不需要,请将它们从传入值中删除,如我的示例所示。
关于json - 使用 JSON_MODIFY 附加到空白列失败,并出现 "Unexpected character ' .' is found at position 0"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70028734/