Eu tenho uma tabela com uma coluna XML. Eu preciso inserir vários nós e, em seguida, definir esses nós usando valores de uma subconsulta.
Configurar:
use tempdb
CREATE TABLE [dbo].[Sites](
[SiteID] [int] IDENTITY(1,1) NOT NULL,
[SiteInfo] [xml] NULL,
[InVal] Varchar(50) NULL)
insert into [dbo].[Sites] ([InVal]) select 'ABC' union select 'DEF' union select 'GHI'
update [dbo].[Sites] SET [SiteInfo] = '<SiteInfo />'
update [dbo].[Sites] SET [SiteInfo].modify('insert <SiteID/> into (/SiteInfo[1])')
Aqui está minha atualização em sua forma mais simples.
update Sites SET [SiteInfo].modify('replace value of (/SiteInfo/@SiteID)[1] with sql:column("InVal")')
Eu tentei com nós singleton e não singleton
O resultado final deve preferencialmente não ser um singleton. ou seja, algo como:
<SiteInfo>
<SiteID>ABC</SiteID>
</SiteInfo>
Você não tem nada para substituir em
<SiteID/>
. Tente e use uminsert
em vez disso: