Sir*_*lot 4 sql-server-2008 xml insert
我有一个应用程序,它在 XML 字段中存储可选的站点信息。
示例表:
CREATE TABLE [dbo].[Sites](
[SiteID] [int] IDENTITY(1,1) NOT NULL,
[SiteName] [nvarchar](80) NULL,
[SiteInfo] [xml] NULL );
INSERT INTO [dbo].[Sites] ([SiteName]) VALUES ('TestSite1') ;
Run Code Online (Sandbox Code Playgroud)
如果没有应用属性,则 XML 字段为 NULL。如果这些属性中的任何一个确实适用,则应用程序会插入一个 XML 文档和相关节点。
一个有效的例子如下所示:
<SiteInfo>
<BoreID>ABC123</BoreID>
<ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
Run Code Online (Sandbox Code Playgroud)
我需要从另一个系统迁移一些数据,所以我试图将数据插入到这个字段/XML 中。到目前为止,我的尝试导致了应用程序不喜欢的单例节点。
使用我在网上找到的一些示例,我尝试了以下操作:
update [dbo].[Sites]
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)')
where Siteid = 1
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
消息 2226,级别 16,状态 1,第 1 行 XQuery [dbo.Sites.SiteInfo.modify()]:'insert' 的目标必须是单个节点,找到 'element(SiteInfo,xdt:untyped) *'
问题:
For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/> 干杯
皮特
答案:
update [dbo].[Sites] SET [SiteInfo] = '<SiteInfo />' 您只需要使用 [1] 指定第一个 SiteInfo 节点
update [dbo].[Sites]
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo[1])')
where Siteid = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19370 次 |
| 最近记录: |