2010-12-23 97 views
2

我想知道如何将XML分层数据转换为表格格式并与SQL Server 2005 T-SQL(XPath/XQuery)中的其他关系数据库表连接。在T-SQL中将XML数据转换为表格格式

例如,

<Employees> 
    <Employee ID="001" Name="David" /> 
    <Employee ID="002" Name="Mike" /> 
    <Employee ID="003" Name="Alex" /> 
    <Employee ID="004" Name="Morris" /> 
</Employees> 

要..

ID  Name 
    --------+-------- 
    001  David 
    002  Mike 
    003  Alex 
    004  Morris 

感谢您的建议。 :)

回答

4

这里有一种方法:

declare @x xml 

set @x = '<Employees> 
       <Employee ID="001" Name="David" /> 
       <Employee ID="002" Name="Mike" /> 
       <Employee ID="003" Name="Alex" /> 
       <Employee ID="004" Name="Morris" /> 
      </Employees>' 

select emp.e.value('@ID','varchar(10)') as ID, 
     emp.e.value('@Name','varchar(10)') as Name 
    from @x.nodes('Employees/Employee') as emp(e) 
+0

嗨乔..它看起来令人印象深刻..感谢您的回答... – 2010-12-23 15:41:02

1

这里是答案乔早些时候提交了轻微的变化:

DECLARE @X xml 
SET @X = '<Employees> 
    <Employee ID="001" Name="David" /> 
    <Employee ID="002" Name="Mike" /> 
    <Employee ID="003" Name="Alex" /> 
    <Employee ID="004" Name="Morris" /> 
</Employees>' 

SELECT 
[Employee].value('@ID','int')As ID, 
[Employee].value('@Name','varchar(10)') As Name 
FROM 
@x.nodes('/Employees/Employee') Employee([Employee]) 

这在MSSQL Server上完成2008 R2

Reference Site

+0

嗨Suirtimed ...感谢您的时间和答案.. – 2010-12-23 15:42:03

0

我希望这个帮助你

declare @xml varchar(max) 

SET @xml = '<Employees> 
    <Employee ID="001" Name="David" /> 
    <Employee ID="002" Name="Mike" /> 
    <Employee ID="003" Name="Alex" /> 
    <Employee ID="004" Name="Morris" /> 
</Employees>' 

Declare @documentHandler INT 

EXEC sp_xml_preparedocument @documentHandler OUTPUT,@xml 

SELECT * 
FROM OPENXML(@documentHandler,'/Employees/Employee') 
     WITH (ID varchar(20), 
      Name varchar(150)) 


EXEC sp_xml_removedocument @documentHandler 
+0

这种较旧的方法效率较低,通常比在另外两个答案中给出了技巧。 – 2010-12-23 15:44:52