SQL Server - столбцы типа xml - XML DML
Я хочу удалить некоторые узлы из меню xml, которое хранится в типизированном столбце xml в базе данных.
Фрагмент из меню xml -
<menu xmlns="http://xxx" ..>
<menuItem name="Menu1">
<menuItem name="SubMenu1">
<role>role1</role>
<url target="webPage1.aspx" />
</menuItem>
</menuItem>
Я пытаюсь удалить <role>
под menuItem = "SubMenu1"
используя следующий XML DML -
UPDATE [dbo].[MenuTest]
SET xmlMenu.modify('
declare namespace ns="http://xxx";
delete(/ns:menu/ns:menuItem[@name="Menu1"]/ns:menuItem[@name="SubMenu1"]/ns:role[1])
')
Но получаю эту ошибку:
Сообщение 6965, Уровень 16, Состояние 1, Строка 1
Проверка XML: недопустимое содержимое. Ожидаемый элемент (ы):http://xxx: роль, где был указан элемент 'http://xxx:url'.
Можете пожалуйста подсказать, что мне здесь не хватает.
Спасибо!
1 ответ
Решение
Похоже, ваш XML-столбец подключен к XML-схеме, которая требует <role>
узел перед <url>
узел.
То, что вы разместили здесь, работает просто отлично.
declare @T table
(
xmlMenu xml
)
insert into @T values
('<menu xmlns="http://xxx">
<menuItem name="Menu1">
<menuItem name="SubMenu1">
<role>role1</role>
<url target="webPage1.aspx" />
</menuItem>
</menuItem>
</menu>')
UPDATE @T
SET xmlMenu.modify('
declare namespace ns="http://xxx";
delete(/ns:menu/ns:menuItem[@name="Menu1"]/ns:menuItem[@name="SubMenu1"]/ns:role[1])
')
Результат
<menu xmlns="http://xxx">
<menuItem name="Menu1">
<menuItem name="SubMenu1">
<url target="webPage1.aspx" />
</menuItem>
</menuItem>
</menu>