Использование Xquery для замены значения узла xsi:nil = "true"
Я пытаюсь использовать XQuery в SQL Server 2005 для обновления XML, сохраненного в столбце. Вот пример данных, которые мне нужно обновить.
<Length>3</Length>
<Width>5</Width>
<Depth>6</Depth>
<Area xsi:nil="true" />
<Volume xsi:nil="true" />
Мне нужно установить площадь и объем на значения из другой таблицы. Я создаю CTE для обновления. Есть другая логика, которую я пропустил, но я убедился, что CTE содержит правильные данные для обновления:
;with Volume (DocumentID, Volume) As
(
Select DocumentID, Volume from tbl
)
и я использую следующую инструкцию SQL XQuery, чтобы попытаться обновить таблицу.
UPDATE tbl_Archive
SET XML.modify(' declare namespace x="http://www.redacted.com";
replace value of (/x:Document/x:Volume/text())[1]
with sql:column("Volume.Volume")')
From Volume where volume.documentID = tbl_Archive.DocumentID
На меня влияет 1 строка, но когда я смотрю на XML, он не изменился, и я не могу понять, что нужно исправить, чтобы он работал. Узел не типизирован, если это имеет значение.
1 ответ
Обновление не будет работать, если нет текста для замены.. XPath /x:Document/x:Volume/text())[1]
вернет пустой набор.
Попробуйте вставить...
UPDATE tbl_Archive
SET XML.modify(' declare namespace x="http://www.redacted.com";
insert text {sql:column("Volume.Volume")}
as first into (/x:Document/x:Volume)[1]')
From Volume where volume.documentID = tbl_Archive.DocumentID
... вам нужно будет удалить nil="true"
атрибут..
Примерно так может быть..
update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xsi:nil')