Вставить в пустой XML-столбец

#sql #xml #sql-server-2019

#sql #xml #sql-server-2019

Вопрос:

Используя SQL Server 2019, пытаюсь обновить загрузку продуктов в нашей системе с исходным кодом, 29 тыс. строк на данный момент не имеют значения, этот столбец хранится в XML-данных, в других XML-столбцах есть данные, которые изменяются для каждого продукта.

Я попробовал обновление, которое работает нормально, но когда дело доходит до вставки, оно терпит неудачу.

Текущий код ниже:

 DECLARE @nameElement VARCHAR(30) = 'Origin';
UPDATE Products SET CustomColumns.modify('replace value of (/CustomColumnsCollection/CustomColumn[Name=sql:variable("@nameElement")]/Value/text())[1] with ("285")')WHERE ProductID = '001SP9000'
 

Текущий формат данных.

 <CustomColumnsCollection>
  <CustomColumn>
    <Name>RequiresCore</Name>
    <DataType>5</DataType>
    <Value>False</Value>
  </CustomColumn>
  <CustomColumn>
    <Name>Core</Name>
    <DataType>4</DataType>
    <Value />
  </CustomColumn>
  <CustomColumn>
    <Name>Origin</Name>
    <DataType>4</DataType>
    <Value />
  </CustomColumn>
</CustomColumnsCollection>
 

Вставка, которую я пробовал, это:

 UPDATE Products SET CustomColumns.modify('Insert (/CustomColumnsCollection/CustomColumn[Name=sql:variable("@nameElement")]/Value/text())[1] with ("285")')WHERE ProductID = '001SP9000'
 

Любые указания или идеи будут с благодарностью приняты.

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

1. Вы говорите, что INSERT это не удается; какое INSERT утверждение вы используете? Какую ошибку вы получаете?

2. Привет, Ларну, я попробовал обновление из приведенного выше, которое просто завершается неудачей, так как значения не существует, скрипт завершается, но ничего не делает. Если это имеет смысл?

3. » Я попробовал обновление из приведенного выше, которое просто завершается неудачей, поскольку значение не существует» это не то, что вы говорите в вопросе: «Я попробовал обновление, которое работает нормально, но когда дело доходит до вставки, оно терпит неудачу». Что это, an UPDATE или an INSERT , который терпит неудачу? Соответствующим образом обновите свой вопрос. И, как я уже сказал, если оператор не выполняется, укажите ошибку.

4. Обновлено с дополнительной информацией, это комбинация обоих, обновление существующих данных, но вставка данных в определенный столбец xml.

5. И в чем ошибка …?

Ответ №1:

Теперь решено с помощью приведенного ниже.

 DECLARE @nameElement VARCHAR(30) = 'Origin';
UPDATE dbo.Products
SET Customcolumns.modify('
        insert text{"248"}
        into ((/CustomColumnsCollection/CustomColumn[Name=sql:variable("@nameElement")]/Value))[1]
        ')
        WHERE ProductID = '001SP9000'
        and Customcolumns.value('(/CustomColumnsCollection/CustomColumn[Name=sql:variable("@nameElement")]/Value/text())[1]', 'nvarchar(30)') is null