【问题标题】:Selecting few columns of a result set as XML选择结果集中的几列作为 XML
【发布时间】:2012-04-28 19:29:12
【问题描述】:

我有一个简单的SELECT 语句,它从单个表中选择几列:

SELECT id, name, phone, address 
FROM tmp_user

是否可以更改此查询,以便只有 idname 处于选择状态,而其余详细信息位于 xml 节点中?

我预计这个选择的输出应该是

id  name        extra data
1   Shreedhar   <data><phone>...</phone><address>...</address></data>
2   John Doe    <data><phone>...</phone><address>...</address></data>
3   Jane Doe    <data><phone>...</phone><address>...</address></data>

返回表的最后一列应该是带有所需数据的 XML 类型。我知道如何使用 FOR XML 将整个结果集转换为 XML。但是,我只寻找要转换的部分列。有可能吗?

【问题讨论】:

  • 能否提供DML和数据进行测试?

标签: xml tsql sql-server-2008-r2


【解决方案1】:

当然!没问题 - 试试这样的:

SELECT 
    id, name,
    (SELECT phone, address
     FROM dbo.tmp_user u2
     WHERE u2.id = u1.id
     FOR XML PATH('data')) AS 'ExtraData'
FROM    
   dbo.tmp_user u1

这为我提供了与您正在寻找的输出完全相同的输出。

【讨论】:

  • 整洁,按要求工作。为什么我自己没有想到这个:(
  • 我还需要将命名空间添加到 xml。像 w3.org/2001/XMLSchema" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:mst="microsoft.com/wsdl/types"> ...
    ... address>
    有人知道怎么做吗?由于 select 语句是嵌套的,我不能使用 WITH XMLNAMESPACES。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多