Обновление нескольких свойств в столбце JSON в SQL Server

#json #sql-server

#json #sql-сервер

Вопрос:

У меня есть таблица в SQL Server, которая содержит nvarchar(max) столбец, содержащий JSON. Мне нужно обновить произвольное количество свойств в JSON в каждой строке.

Поддержка Oracle и MySQL JSON_MERGE_PATCH , что, похоже, было бы идеально.

Я подумал об использовании таблицы | id | jsonPath | value | и выполнении обновления join:

 UPDATE 
    T
SET 
    T.Json = JSON_MODIFY(T.Json, Updates.jsonPath, Updates.value)
FROM 
    T INNER JOIN Updates
ON 
    T.id = Updates.id
  

прежде чем понять, что это (недетерминированно) применит только одно обновление к каждой строке.

Каковы мои варианты?

Обновлено: значения JSON являются почти произвольными документами. (Как это бывает, они не будут содержать массивы, но могут содержать произвольные уровни вложенных объектов).

Когда в моем приложении (c #) будут применены некоторые обновления, оно не будет знать, какие свойства уже существуют в каком-либо данном документе. Также не существует фиксированного ограничения на количество свойств, которые может потребоваться обновить.

Очевидно, что для выполнения обновления я мог бы сначала прочитать текущие документы json из базы данных, выполнить слияние json в моем приложении, а затем отправить результаты обратно в базу данных, но я бы предпочел этого не делать.

Комментарии:

1. Пожалуйста, предоставьте образец вашего документа JSON до и после желаемого изменения.

2. @DavidBrowne-Microsoft Документы JSON могут быть практически любыми (хотя они не содержат массивов). Во время разработки я не знаю, какие свойства они могут иметь, или сколько свойств мне может потребоваться обновить / добавить.

3. В соответствии с приведенным здесь примером: learn.microsoft.com/en-us/sql/t-sql/functions / … к сожалению, похоже, что вам нужно вложить операторы JSON_MODIFY

4. @SteveFord Проблема в том, что я не знаю, сколько свойств мне может потребоваться обновить, поэтому я не знаю, сколько JSON_MODIFY операторов вложить.