在第三个参数中,JSON_MODIFY不支持许多基本类型。怎么修呢?
DECLARE @info NVARCHAR(200)='{"name":"John","skills":["C#","SQL"]}'
SELECT JSON_MODIFY(@info, '$.code', NEWID())
SELECT JSON_MODIFY(@info, '$.date', GETDATE())
SELECT JSON_MODIFY(@info, '$.cost', CAST(1 AS money))Msg 8116,16级,状态1,第3行
对于json_modify函数的参数3,参数数据类型unique标识符无效。Msg 8116,16级,状态1,第5行
参数数据类型日期时间对json_modify函数的参数3无效。Msg 8116,16级,状态1,第8行
参数数据类型money对于json_modify函数的参数3.无效。
发布于 2019-10-03 13:17:47
尝试使用我的dbo.JSON_MODIFY函数来解决问题
CREATE FUNCTION dbo.JSON_MODIFY(@expression nvarchar(max), @path nvarchar(max), @newValue sql_variant)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @tempJson nvarchar(max) = (SELECT @newValue AS col1 FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
RETURN JSON_MODIFY(@expression, @path, JSON_VALUE(@tempJson, '$.col1'))
END
GO
DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'
PRINT dbo.JSON_MODIFY(@info, '$.code', NEWID())
PRINT dbo.JSON_MODIFY(@info, '$.date', GETDATE())
PRINT dbo.JSON_MODIFY(@info, '$.cost', CAST(1 AS money))
GO产出结果:
"code":"85543240-38C5-4647-B555-4388ADAD71F0"} {“名称”:“John”,“
”:“C#”,"SQL",
{“名称”:“约翰”,“技能”:“C#”,"SQL",“日期”:“2019-10-03T16:16:10.600”}
{“名称”:“约翰”,“技能”:“C#”,"SQL",“成本”:“1.0000”}
发布于 2021-05-19 06:33:14
我可以想到几个原因,为什么在SQL中更新json是个坏主意,首先是那些使用JSON的配置选项。如果您使用的需要能够往返JSON,并且使用类似于NewtonSoft的默认设置,则需要以特定的方式转换/格式化日期字符串。
select format(GetUtcDate(),'yyyy-MM-dd''T''HH:mm:ss.fff')+'Z'在您的示例中,当数据离开数据库时,您可能应该使用.net读取数据.无论如何,您都需要确保您的数据库与那些使用数据的数据库对齐,并以我的用例使用格式确保数据不会生成损坏的JSON。
DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'在您的修改中,如下所示
SELECT JSON_MODIFY(@info, '$.date', format(GetUtcDate(),'yyyy-MM-dd''T''HH:mm:ss.fff')+'Z')https://stackoverflow.com/questions/58219782
复制相似问题