#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
операторов вложить.