T-SQL JSON_MODIFY Ошибка: недопустимый тип данных аргумента: уникальный идентификатор (дата, время и т. Д.) - PullRequest
0 голосов
/ 03 октября 2019

JSON_MODIFY не поддерживает много базовых типов в третьем аргументе. Как это исправить?

DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'

SELECT JSON_MODIFY(@info, '$.code', NEWID())

SELECT JSON_MODIFY(@info, '$.date', GETDATE())

DECLARE @dollar money = 1.00
SELECT JSON_MODIFY(@info, '$.cost', @dollar)

Сообщение 8116, уровень 16, состояние 1, строка 3
Тип данных аргумента uniqueidentifier недопустим для аргумента 3 функции json_modify.

Msg8116, Уровень 16, Состояние 1, Строка 5
Тип данных аргумента datetime недопустим для аргумента 3 функции json_modify.

Сообщение 8116, уровень 16, состояние 1, строка 8
Аргумент типа данных money недопустим для аргумента 3 функции json_modify.

1 Ответ

0 голосов
/ 03 октября 2019

Попробуйте использовать мою функцию 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

Вывод результатов:

{"name": "John", "skills": ["C #"," SQL "]," code ":" 85543240-38C5-4647-B555-4388ADAD71F0 "}
{" name ":" John "," skills ": [" C # "," SQL "],"дата ":" 2019-10-03T16: 16: 10.600 "}
{" имя ":" Джон "," навыки ": [" C # "," SQL "]," стоимость ":" 1.0000 "}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...