2011-04-01 64 views
1

嗨可能有人给我提供一些线索或解决方案来检索记录集类似下面检索XML输出从SQL Server 2005

注:我读的MSDN文档,但使我无处但脱发:(

刚对于假设想我已经经由Rid字段

表1的字段2个连接表,

Rid,UserName,Hash 

表2字段

Rid,Phone,City,Email 

table1table2经由摆脱场相连。

我想使用XML自动或XML明示或您在SQL Server Express拿到过XML操作2005

产量预计将有一个XML输出:

<UserDetails> 
    <Account> 
     <UserName></UserName> 
     <Hash></Hash> 
    </Account> 
    <Personal> 
     <Phone1></Phone1> 
     <City1></City1> 
     <Phone2></Phone2> 
     <City2></City2> 
    </Personal> 
</UserDetails> 

的个人资料可以有n个记录。但帐户详细信息只有一个。

+0

所以,你是否将一个'Rid'传递给一个程序来为单个用户获取这个输出,或者你想为所有用户提供一个XML? – 2011-04-01 11:17:41

+0

@marc_s我希望它能同时工作。我会通过摆脱单个记录。如果我想要所有的东西 – Deeptechtons 2011-04-01 11:35:10

回答

1

你可以试试这个 - 我不能做的是创造那些“嵌入式枚举”

<Phone1></Phone1> 
<City1></City1> 
<Phone2></Phone2> 
<City2></City2> 

我不知道有什么方法可以轻松地使这些按顺序编号的XML标签...

所有我能做的就是我要在结束时显示输出:

SELECT 
    t1.UserName AS 'Account/UserName', 
    t1.UserHash AS 'Account/Hash', 
    (SELECT 
     t2.Phone AS 'Phone', 
     t2.City AS 'City' 
    FROM table2 t2 
    WHERE t2.Rid = t1.Rid 
    FOR XML PATH(''), TYPE 
    ) AS 'Personal' 
FROM 
    table1 t1 
FOR XML PATH('UserDetails'), ROOT('Users') 

这给了我一个输出类似:

<Users> 
    <UserDetails> 
    <Account> 
     <UserName>xxxxx</UserName> 
     <Hash>hhhhhhh</Hash> 
    </Account> 
    <Personal> 
     <Phone>.....</Phone> 
     <City>.....</City> 
     <Phone>..........</Phone> 
     <City>.........</City> 
    </Personal> 
    </UserDetails> 
    <UserDetails> 
    <Account> 
     <UserName>cccccccccccc</UserName> 
     <Hash>hhhhhhhhhhhh</Hash> 
    </Account> 
    <Personal> 
     <Phone>................</Phone> 
     <City>...........</City> 
    </Personal> 
    </UserDetails> 
</Users> 

当然,如果需要,您可以将WHERE t1.rid = xxx条件添加到外部SELECT以限制检索到的用户及其详细信息。

+1

谢谢你的精湛的代码,请留空。像魅力一样工作。我会拍摄另一个堆栈以检查这是否是DBStackExchage的最佳方法。谢谢 – Deeptechtons 2011-04-02 04:19:39