2015-04-07 2 views
1

Я очень новичок в SQL DML, и я мог бы использовать любую помощь в проницательности, если это возможно.Возможно ли заменить весь узел на SQL DML?

declare @xml XML, @id int, @new XML 
SET @id = 2 
SET @xml = '<root><node ids=1><child /></node><node ids=2><child /></node></root>' 
SET @new = '<node ids=2,3><child /></node>' 

Я хотел бы установить весь элемент узла от корня, чтобы быть таким же, как @new, но у меня возникли проблемы, выясняя синтаксис с SQL DML. Я знаю, что следующее не работает по нескольким причинам, но считаю его почти псевдокодом в отношении функциональности, которую я пытаюсь выполнить.

SET @xml.modify('replace value of (/root/node[@id=sql:variable("@id")]) with sql:variable(@new)') 

У меня может быть больше синтаксиса, чем я понимаю, так как я еще не знаком с этим материалом. Я знаю, что он ожидает, что я укажу/text() для нетипизированного значения, но я бы тоже хотел заменить тег «node» для упаковки и что сначала он должен взять с [1]. Каков правильный синтаксис для обработки такого рода вызовов?

ответ

2

delete вы можете в node дочерний элемент, а затем вставить новый элемент node

SET @xml.modify(' delete (/root/node)'); 
SET @xml.modify('insert sql:variable("@new") into (/root)[1] ')