首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL JSON_MODIFY错误:参数数据类型unique标识符(日期、时间、货币等)无效

T-SQL JSON_MODIFY错误:参数数据类型unique标识符(日期、时间、货币等)无效
EN

Stack Overflow用户
提问于 2019-10-03 13:04:26
回答 2查看 848关注 0票数 2

在第三个参数中,JSON_MODIFY不支持许多基本类型。怎么修呢?

代码语言:javascript
复制
    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.无效。

EN

回答 2

Stack Overflow用户

发布于 2019-10-03 13:17:47

尝试使用我的dbo.JSON_MODIFY函数来解决问题

代码语言:javascript
复制
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”}

票数 1
EN

Stack Overflow用户

发布于 2021-05-19 06:33:14

我可以想到几个原因,为什么在SQL中更新json是个坏主意,首先是那些使用JSON的配置选项。如果您使用的需要能够往返JSON,并且使用类似于NewtonSoft的默认设置,则需要以特定的方式转换/格式化日期字符串。

代码语言:javascript
复制
select format(GetUtcDate(),'yyyy-MM-dd''T''HH:mm:ss.fff')+'Z'

在您的示例中,当数据离开数据库时,您可能应该使用.net读取数据.无论如何,您都需要确保您的数据库与那些使用数据的数据库对齐,并以我的用例使用格式确保数据不会生成损坏的JSON。

代码语言:javascript
复制
DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'

在您的修改中,如下所示

代码语言:javascript
复制
SELECT JSON_MODIFY(@info, '$.date', format(GetUtcDate(),'yyyy-MM-dd''T''HH:mm:ss.fff')+'Z')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58219782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档