SQL Server xml копирует значения одного узла в другой - PullRequest
1 голос
/ 11 января 2010

Я хочу скопировать значения одного узла на другой в SQL Server (2005 и 2008). например, если один из данных XML такой, как показано ниже

 <Data>
<Name></Name>
<ShortName>Joe</ShortName>
</Data>

результирующий xml должен быть

<Data>
<Name>Joe</Name>
<ShortName>Joe</ShortName>

оператор обновления должен влиять на все строки в таблице

ценю любую помощь спасибо

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Вы должны остерегаться сбоев Silent XQuery .

Проблема в этом случае заключается в том, что выражение XPath (/ Data / Name / text ()) 1 возвращает пустую последовательность. «Имя» - это пустой элемент (у него нет дочерних элементов). Поэтому выражение (/ Data / Name / text ()) 1 не указывает ни на один из существующих узлов. Решением этой проблемы является вставка нового текстового узла внутри элемента Name, например:

DECLARE @myDoc xml
SET @myDoc = '<Data>
    <Name></Name>
    <Name2>dd</Name2>
    <ShortName>Joe</ShortName>
</Data>'

SELECT @myDoc

if (@myDoc.exist('(/Data/Name/text())[1]') = 1) BEGIN
    set @myDoc.modify('
        replace value of (/Data/Name/text())[1]
        with (/Data/ShortName/text())[1]
    ')
end else begin
    set @myDoc.modify('
        insert (/Data/ShortName/text())[1]
        as first into (/Data/Name)[1]
    ')
end

SELECT @myDoc
0 голосов
/ 11 января 2010

получил решение обновить набор таблиц col.modify (заменить значение (/ Name / text ()) [1] на (/ ShortName / text ()) [1])

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