Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <pre><code>declare @T table(XMLCol xml) insert into @T values ('&lt;image&gt; &lt;FileName&gt;Tim+bottom&lt;/FileName&gt; &lt;FilePath&gt;/Top+Bottom/AFX8995+450.jpg&lt;/FilePath&gt; &lt;/image&gt;') update T set XMLCol.modify('replace value of (/image/FilePath[1]/text())[1] with sql:column("T2.FilePath")') from @T as T cross apply (select replace(XMLCol.value('(/image/FilePath)[1]', 'varchar(100)'), '+', '_') ) as T2(FilePath) </code></pre> <p><strong>Edit</strong></p> <p>The table variable <code>@T</code> above is instead of your table. Assume that your table is named <code>YourTable</code> and you have one <code>ID</code> column and <code>XMLCol</code> column. The update statement could look like this to change the XML where <code>ID</code> is 1.</p> <pre><code>update T set XMLCol.modify('replace value of (/image/FilePath[1]/text())[1] with sql:column("T2.FilePath")') from YourTable as T cross apply (select replace(XMLCol.value('(/image/FilePath)[1]', 'varchar(100)'), '+', '_') ) as T2(FilePath) where T.ID = 1 </code></pre> <p><strong>Edit</strong></p> <p>It is not possible to update more than one node at a time with <code>.modify()</code>. You have to do this in a loop. The script below uses <code>@T</code> as a test table. You should replace that with whatever your table is called. <code>@T</code> has an <code>ID</code> column and the script assumes that you only update one row at a time and that you know the ID for that row. There are some comments in the code that explains what I do. Don't hesitate to ask if there are something I should make clearer.</p> <pre><code>-- Test table declare @T table(ID int, XMLCol xml) -- Sample data insert into @T values (1, '&lt;mediadata&gt; &lt;image&gt; &lt;FileName&gt;BUF2011-450&lt;/FileName&gt; &lt;FilePath&gt;1/uploadedImages/Products/Indoor_Fun/Puzzles___Brain_Teasers/Puzzles/2000+_Pieces/BUF2011-450.jpg&lt;/FilePath&gt; &lt;Thumbnails&gt; &lt;Thumbnail&gt; &lt;FileName&gt;BUF2011-450&lt;/FileName&gt; &lt;FilePath&gt;2/uploadedImages/Products/Indoor_Fun/Puzzles___Brain_Teasers/Puzzles/2000+_Pieces/thumb_BUF2011-450_Large.jpg&lt;/FilePath&gt; &lt;/Thumbnail&gt; &lt;Thumbnail&gt; &lt;FileName&gt;BUF2011-450&lt;/FileName&gt; &lt;FilePath&gt;3/uploadedImages/Products/Indoor_Fun/Puzzles___Brain_Teasers/Puzzles/2000+_Pieces/thumb_BUF2011-450_Small.jpg&lt;/FilePath&gt; &lt;/Thumbnail&gt; &lt;/Thumbnails&gt; &lt;/image&gt; &lt;/mediadata&gt; ') -- ID for the row you need to update declare @ID int set @ID = 1 -- Loop variable, node to update declare @Pos int set @Pos = 1 -- The number of nodes to update declare @Count int -- Get the number of FilePath nodes select @Count = XMLCol.query('count(//FilePath)').value('.', 'int') from @T where ID = @ID while @Pos &lt;= @Count begin update T set XMLCol.modify('replace value of ((//FilePath)[sql:variable("@Pos")]/text())[1] with sql:column("T2.FilePath")') from @T as T cross apply (select replace(T.XMLCol. query('(//FilePath)[sql:variable("@Pos")]'). value('.', 'varchar(100)'), '+', '_') ) as T2(FilePath) where T.ID = @ID set @Pos += 1 end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload