2014-05-12 65 views
0

不知道有沒有人可以幫忙。我有一個看起來像這樣的xml字符串。from @ xml.nodes SQL xml

<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> 

我用這

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) 

我的問題在插入數據是,一旦初始插件做我想插入所有VLAN的項目,但我無法弄清楚如何遍歷他們並獲得正確的數據。

請有人可以幫助我。

感謝, 傑布

+0

一旦你插入tbl_users,我假設你會得到一個新的用戶ID自動遞增?然後你想用這個新的ID來存儲你的vlans記錄在一個單獨的表中?如果是這樣,我們需要其他表格的詳細信息和所涉及的ID來幫助。 – sarin

+0

是的,正確的。另一個表稱爲tbl_user_vlans,ID爲1 – Jebanisa

+0

新表中的列是什麼?什麼是tbl_users的ID列名稱? – sarin

回答

1

如果tbl_users PK場是自動遞增的,你可以使用這樣的事情:

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) 

您還可以,如果你需要做的交易。

+0

該解決方案假定僅插入一個客戶端。如果有多個客戶端,它將只返回插入的最後一個User_Id,並因此插入所有具有最後一個ID的vlans。 – sarin

+0

謝謝你,先生。這就像一場夢。標記的答案是正確的:) – Jebanisa

+0

如果我們有很多客戶端,你可以使用'output inserted.ID到#t'來獲得所有的inseted ID。 –