2013-07-26 32 views
0

我有以下幾點:如何使用SQL從以下XML中選擇節點值?

DECLARE @XML XML 
    SET @XML = '<?xml version="1.0" encoding="utf-8"?> 
<member xmlns="http:...xsd" xmlns:xsi="http:...XMLSchema-instance"> 
    <Person> 
    <Name>Jorge</Name> 
    <LastName>Bond</LastName> 
    </Person> 
    <Person> 
    <Name>Jorge</Name> 
    <LastName>Bond</LastName> 
    </Person> 
</member> 

我有下面的表:

  • 會員
  • 名稱
  • 名字

怎麼辦我去阿迪將XML中的值添加到我的表中?

如果我沒有弄錯,我不得不做一個交叉應用,但我不知道如何做到這一點。

+0

你可以使用節點()方法([link](http://msdn.microsoft.com/en-us/library/m s188282.aspx))。 –

回答

1

您可以使用這樣的事情:

DECLARE @XML XML 
SET @XML = '<?xml version="1.0" encoding="utf-8"?> 
<member xmlns="http://testxsd" xmlns:xsi="http:...XMLSchema-instance"> 
    <Person> 
    <Name>Jorge</Name> 
    <LastName>Bond</LastName> 
    </Person> 
    <Person> 
    <Name>Jorge</Name> 
    <LastName>Bond</LastName> 
    </Person> 
</member>' 

;WITH XMLNAMESPACES(DEFAULT 'http://testxsd') 
SELECT 
    PersonName = XPerson.value('(Name)[1]', 'varchar(50)'), 
    PersonLastName = XPerson.value('(LastName)[1]', 'varchar(50)') 
FROM @XML.nodes('/member/Person') AS XTbl(XPerson) 

,這將給你的輸出:

enter image description here

和當然,如果你想將數據插入表中,你可以使用:

;WITH XMLNAMESPACES(DEFAULT 'http://testxsd') 
INSERT INTO dbo.Person(Name, LastName) 
    SELECT 
     PersonName = XPerson.value('(Name)[1]', 'varchar(50)'), 
     PersonLastName = XPerson.value('(LastName)[1]', 'varchar(50)') 
    FROM @XML.nodes('/member/Person') AS XTbl(XPerson)