#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
или anINSERT
, который терпит неудачу? Соответствующим образом обновите свой вопрос. И, как я уже сказал, если оператор не выполняется, укажите ошибку.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