Re: replace value of empty element?
- From: "Michael Rys [MSFT]" <mrys@xxxxxxxxxxxxxxxxxxxx>
- Date: Sun, 20 May 2007 16:11:14 -0700
Try the following:
declare @xml xml
set @xml = '<root><test></test></root>'
set @xml.modify('replace value of (/root/test/text())[1] with "test
new value"')
set @xml.modify('insert text{ "test
new value"} into (/root/test[not(text())])[1]')
select @xml
Best regards
Michael
<doctorphan@xxxxxxxxx> wrote in message
news:1177078051.463036.85330@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Apr 19, 6:07 pm, "Denis Ruckebusch [MSFT]"
<denis...@xxxxxxxxxxxxxxxxxxxx> wrote:
In the first case, when you use expression (/root/test/text())[1] you
refer to
something that doesn't exist (there is no text node under element test)
and
therefore nothing gets updated.
What you need to do is insert a new text node inder element "test" like
this
declare @xml xml
set @xml = '<root><test></test></root>'
set @xml.modify('insert text{"test new value"} as first into
(/root/test)[1] ')
select @xml
I hope this helps.
Denis Ruckebusch
--
This posting is provided "AS IS" with no warranties, and confers no
rights.
Use of included script samples are subject to the terms specified
athttp://www.microsoft.com/info/cpyright.htm
<doctorp...@xxxxxxxxx> wrote in message
news:1177013246.440921.259810@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hi,
In SQL 2005, I have a XML with an one element with an empty value like
so:
<root>
<test></test>
</root>
When I try and replace the value of (/root/test) it does not seem to
work:
declare @xml xml
set @xml = '<root><test></test></root>'
set @xml.modify('replace value of (/root/test/text())[1] with "test
new value"')
select @xml
returns this:
<root>
<test></test>
</root>
If however the element has a value already like so:
<root>
<test>some old value here already</test>
</root>
and I re-rerun the statement above:
declare @xml xml
set @xml = '<root><test></test></root>'
set @xml.modify('replace value of (/root/test/text())[1] with "test
new value"')
select @xml
returns this:
<root>
<test>test new value</test>
</root>
Is something wrong there?- Hide quoted text -
- Show quoted text -
So I guess there is no one built-in statement that will work in both
scenarios? ie. One that will insert the text if one doesn't exist, and
one that will replace the text if it already exists. I guess I will
have to write a function?
.
- Prev by Date: Re: SQLXMLBulkload performance
- Next by Date: Re: MSSQL2K FOR XML Explicit help?
- Previous by thread: Re: SQLXMLBulkload performance
- Next by thread: Re: MSSQL2K FOR XML Explicit help?
- Index(es):
Relevant Pages
|