Обновить данные XML в SQL Server - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно обновить значение abc_NumberOfHoldDays до пустого значения, как показано ниже. Я не могу выполнить запрос - может ли кто-нибудь помочь мне проверить запрос для обновления данных XML?

XML

<Plans>
<Plan>
  <Coverages>
        <Coverage>
          <Answers>
            <AnswersList>
              <Entry key="abc_NumberOfHoldDays" type="System.String">
                <value>11</value>
              </Entry>
 </Coverages>
  </Coverage>
 </Answers>
 </AnswersList>
</plan>
<Plan>
  <Coverages>
        <Coverage>
          <Answers>
            <AnswersList>
              <Entry key="abc_NumberOfHoldDays" type="System.String">
                <value>12</value>
              </Entry>
 </Coverages>
  </Coverage>
 </Answers>
 </AnswersList>
</plan>

Мой запрос:

DECLARE @COUNT INT
DECLARE @xml xml

SET @COUNT = (SELECT Data.value ('count((/*/Plans/Plan/Coverages/Coverage/Answers/AnswersList/Entry[@key="abc_NumberOfHoldDays"]/value))', 'INT') FROM  table1)

SET @xml = (SELECT Data FROM table1)

--SELECT @COUNT
--SELECT @xml

WHILE @COUNT > 0
BEGIN
    SET @xml.modify('replace value of (//Plans/Plan/Coverages/Coverage/Answers/AnswersList/Entry[@key="abc_NumberOfHoldDays"][sql:variable("@COUNT")]/text())[1] with 
    (
       (/Plans/Plan/Coverages/Coverage/Answers/AnswersList/Entry[@key="abc_NumberOfHoldDays"][sql:variable("@COUNT")])[1] =''   
    )
')
    SET @COUNT = @COUNT - 1;
END

1 Ответ

0 голосов
/ 28 июня 2018

Поскольку необходимо использовать двойные кавычки.

declare @xml xml='
<Plans>
<Plan>
  <Coverages>
        <Coverage>
          <Answers>
            <AnswersList>
              <Entry key="abc_NumberOfHoldDays" type="System.String">
                <value>11</value>
              </Entry>
 </AnswersList>
 </Answers>
  </Coverage>
 </Coverages>
</Plan>
<Plan>
  <Coverages>
        <Coverage>
          <Answers>
            <AnswersList>
              <Entry key="abc_NumberOfHoldDays" type="System.String">
                <value>12</value>
              </Entry>
 </AnswersList>
 </Answers>
  </Coverage>
 </Coverages>
</Plan>
</Plans>';

SET @xml.modify('
replace value of (//Entry[@key="abc_NumberOfHoldDays"]/value[1]/text())[1] with ""
');
select @xml;

Или можно полностью удалить элементы "value".

SET @xml.modify('delete //Entry[@key="abc_NumberOfHoldDays"]/value');
select @xml;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...