2015-03-26 3 views
0

Я пытаюсь изменить узел в XML, который получает новый идентификатор после вставки в основной XML этого xml-поля, где groupid = @groupid и qubefieldId = @iXquery с столбцом XML в Xml.Modify в SQL Server не работает

Может кто-нибудь сказать мне, почему это не работает?

Update @temp 
Set xmlField.modify('replace value of (/ArrayOfQubeField/QubeField[QubeFieldID = sql:variable("@i")]/text())[1] with sql:variable ("@newID")') 
Where XmlField.exist('/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")][QubeFieldID = sql:variable("@i")]') = 1; 

Вот XML

<ArrayOfQubeField xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <QubeField> 
     <QubeFieldID>1</QubeFieldID> 
     <GroupID>1</GroupID> 
     <QubeFieldName>ID</QubeFieldName> 
     <QubeFieldSelected>true</QubeFieldSelected> 
     <Order>0</Order> 
    </QubeField> 
<QubeField> 
<QubeFieldID>1</QubeFieldID> 
    <GroupID>4</GroupID> 
    <QubeFieldName>Name</QubeFieldName> 
    <QubeFieldSelected>true</QubeFieldSelected> 
    <Order>1</Order> 
</QubeField> 
<QubeField> 
    <QubeFieldID>2</QubeFieldID> 
    <GroupID>3</GroupID> 
    <QubeFieldName>Town</QubeFieldName> 
    <QubeFieldSelected>true</QubeFieldSelected> 
    <Order>2</Order> 
</QubeField> 
<QubeField> 
    <QubeFieldID>1</QubeFieldID> 
    <GroupID>3</GroupID> 
    <QubeFieldName> Name</QubeFieldName> 
    <QubeFieldSelected>true</QubeFieldSelected> 
    <Order>3</Order> 
</QubeField> 
<QubeField> 
    <QubeFieldID>13</QubeFieldID> 
    <GroupID>1</GroupID> 
    <QubeFieldName>Migrated</QubeFieldName> 
    <QubeFieldSelected>true</QubeFieldSelected> 
    <Order>4</Order> 
</QubeField> 
<QubeField> 
    <QubeFieldID>16</QubeFieldID> 
    <GroupID>1</GroupID> 
    <QubeFieldName>Date</QubeFieldName> 
    <QubeFieldSelected>true</QubeFieldSelected> 
    <Order>5</Order> 
</QubeField> 
</ArrayOfQubeField> 
+0

@marc_s Почему сбить меня с ног – user551445

+0

Я ** только ** попытался немного почистить ваш пост - я *** НЕ СНИЗИЛ *** вниз! –

+1

Если мне придется догадаться, я бы сказал, что у вас есть нисходящий голос, потому что ваш вопрос не совсем ясен. «Не работает» не является описанием ошибки - ** Что ** не работает, какое сообщение вы получаете? Кроме того, кричать «СРОЧНО», как в названии, не заставит никого из нас отвечать быстрее (в наше свободное время, бесплатно) – dirkk

ответ

1

Вы упускаете QubeFieldID в XPath, попробовать что-то вроде этого:

update @temp set 
    xmlField.modify(' 
     replace value of 
     (/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")]/QubeFieldID[. = sql:variable("@i")]/text())[1] 
     with sql:variable("@newID") 
    ') 

sql fiddle demo

+0

. Спасибо, что я не сделал то, что вы сделали, но мой был бит-скрипач, используя позицию и другой цикл, используя счетчик. Я поменяю свой код на свой гораздо более аккуратный. – user551445