我有一个带有 XML 列的表。我需要插入各种节点,然后使用子查询中的值设置这些节点。
设置:
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])')
这是我最简单形式的更新。
update Sites SET [SiteInfo].modify('replace value of (/SiteInfo/@SiteID)[1] with sql:column("InVal")')
我已经尝试过单例和非单例节点
最终结果最好不要是单例。即类似的东西:
<SiteInfo>
<SiteID>ABC</SiteID>
</SiteInfo>
你没有什么可以替换的
<SiteID/>
。尝试使用 aninsert
代替: