首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自@xml.nodes SQL xml

来自@xml.nodes SQL xml
EN

Stack Overflow用户
提问于 2014-05-12 11:48:41
回答 1查看 72关注 0票数 0

想知道有没有人能帮忙。我有一个xml字符串,它看起来像这样。

代码语言:javascript
复制
<install>
  <client>
    <account_id><![CDATA[123]]></account_id>
<account_name><![CDATA[123]]></account_name>
<account_name_abbr><![CDATA[123]]></account_name_abbr>
<location>
  <id><![CDATA[5]]></id>
  <name><![CDATA[Bryanston Lab]]></name>
</location>
<ram><![CDATA[10]]></ram>
<cpu><![CDATA[20]]></cpu>
<disk><![CDATA[30]]></disk>
<ip_ranges>
  <item><![CDATA[1.1.1.1/27]]></item>
  <item><![CDATA[1.1.1.1/27]]></item>
  <item><![CDATA[2.2.2.2/25]]></item>
</ip_ranges>
<vlans>
  <item><![CDATA[4001]]></item>
  <item><![CDATA[3000]]></item>
  <item><![CDATA[350]]></item>
</vlans>
</client>
</install>

我使用以下方法插入数据

代码语言:javascript
复制
insert into tbl_users
select
x.y.value('(account_id)[1]', 'nvarchar(150)') as account_id
,x.y.value('(account_name)[1]', 'nvarchar(350)') as account_name
,x.y.value('(account_name_abbr)[1]', 'nvarchar(150)') as account_name_abbr
,x.y.value('(location/id)[1]', 'int') as location_id
,x.y.value('(cpu)[1]', 'int') as cpu_amount
,x.y.value('(ram)[1]', 'int') as ram_amount
,x.y.value('(disk)[1]', 'int') as disk_amount
from @xml.nodes('//install/client') as x(y)

我的问题是,一旦初始插入完成,我想插入所有的vlans项目,但我不知道如何循环它们并获得正确的数据。

有人能帮帮我吗。

谢谢你,杰布

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-12 12:56:06

如果tbl_users中的PK字段是自动递增的,则可以使用如下所示:

代码语言:javascript
复制
insert into tbl_users
select
x.y.value('(account_id)[1]', 'nvarchar(150)') as account_id
,x.y.value('(account_name)[1]', 'nvarchar(350)') as account_name
,x.y.value('(account_name_abbr)[1]', 'nvarchar(150)') as account_name_abbr
,x.y.value('(location/id)[1]', 'int') as location_id
,x.y.value('(cpu)[1]', 'int') as cpu_amount
,x.y.value('(ram)[1]', 'int') as ram_amount
,x.y.value('(disk)[1]', 'int') as disk_amount
from @xml.nodes('//install/client/vlans') as x(y)
declare @tbl_users_id int = scope_identity()

insert tbl_users_vlans([user_id],[vlan])
select @tbl_users_id, x.y.value('data(.)', 'nvarchar(150)')
from @xml.nodes('//install/client/vlans/item') as x(y)

如果需要的话,您也可以在事务中这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23608244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档