Если я правильно понимаю вопрос, вам не нужен курсор, просто обновите операторы:
Таблица:
CREATE TABLE Data (
key_index int,
key_value nvarchar(max)
)
INSERT INTO Data
(key_index, key_value)
VALUES
(0, N'{"id": 219002, "name": "provider", "protokol": "htpps"}'),
(1, N'{"srp": "srp", "workload": "2"}')
Оператор с несколькими обновлениями:
UPDATE d
SET d.key_value = JSON_MODIFY(d.key_value, '$.id', 1)
FROM Data d
CROSS APPLY OPENJSON(d.key_value) j
WHERE j.[key] = 'id'
UPDATE d
SET d.key_value = JSON_MODIFY(d.key_value, '$.workload', '5')
FROM Data d
CROSS APPLY OPENJSON(d.key_value) j
WHERE j.[key] = 'workload'
-- or
UPDATE Data
SET key_value = JSON_MODIFY(
key_value,
'$.id',
CASE WHEN JSON_VALUE(key_value, 'lax $.id') IS NOT NULL THEN 2 END
)
UPDATE Data
SET key_value = JSON_MODIFY(
key_value,
'$.workload',
CASE WHEN JSON_VALUE(key_value, 'lax $.workload') IS NOT NULL THEN '5' END
)
Оператор с вложенными JSON_MODIFY()
вызовами:
UPDATE Data
SET
key_value = JSON_MODIFY(
JSON_MODIFY(
key_value,
'$.id',
CASE WHEN JSON_VALUE(key_value, 'lax $.id') IS NOT NULL THEN 2 END
),
'$.workload',
CASE WHEN JSON_VALUE(key_value, 'lax $.workload') IS NOT NULL THEN '5' END
)
Результат:
key_index key_value
0 {"id": 1, "name": "provider", "protokol": "htpps"}
1 {"srp": "srp", "workload": "5"}