SQL Server xml.modify метод удаления - PullRequest
5 голосов
/ 18 декабря 2008

У меня проблема с удалением атрибута из узла.

Пример:

DECLARE @processID int
SET @processID = 8

DECLARE @xml XML
SET @xml = 
'<Process id="10" name="Test 1">
  <Shapes>
    <Shape id="1" name="Shape 1" subProcessID="8">
    </Shape>
    <Shape id="2" name="Shape 2" subProcessID="9">
    </Shape>
  </Shapes>
  <Lines />
</Process>'

SET @xml.modify('delete (/Process/Shapes/Shape/@subProcessID[/Process/Shapes/Shape/@subProcessID = sql:variable("@processID")])')
SELECT @xml

Дает результат:

<Process id="10" name="Test 1">
  <Shapes>
    <Shape id="1" name="Shape 1" />
    <Shape id="2" name="Shape 2" />
  </Shapes>
  <Lines />
</Process>

Что бы я хотел:

<Process id="10" name="Test 1">
  <Shapes>
    <Shape id="1" name="Shape 1" />
    <Shape id="2" name="Shape 2" subProcessID="9" />
  </Shapes>
  <Lines />
</Process>

Каков синтаксис для достижения этого?

1 Ответ

1 голос
/ 16 декабря 2013

Поскольку ОП ушел, но он оставил решение в комментарии, позвольте мне добавить это как ответ:

DECLARE @processID int
SET @processID = 8

DECLARE @xml XML
SET @xml = 
'<Process id="10" name="Test 1">
  <Shapes>
    <Shape id="1" name="Shape 1" subProcessID="8">
    </Shape>
    <Shape id="2" name="Shape 2" subProcessID="9">
    </Shape>
  </Shapes>
  <Lines />
</Process>'

SET @xml.modify('delete (/Process/Shapes/Shape[@subProcessID = sql:variable("@processID")]/@subProcessID)')
SELECT @xml

Вот рабочий sqlfiddle для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...