【问题标题】:Get nested XML output sql server获取嵌套的 XML 输出 sql server
【发布时间】:2013-09-13 11:54:06
【问题描述】:

我的 sql server 数据库的 xml 输出有问题。我的桌子:

CREATE TABLE [dbo].[test_table](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [firstname] [nvarchar](255) NULL,
    [lastname] [nvarchar](255) NULL,
    [city] [nvarchar](255) NULL,
    [street] [nvarchar](255) NULL,
    [streetno] [int] NULL
)

我想要输出,其中 Address 嵌套在每个 Person 中,如下所示:

<Root>
  <Person id="1">
    <firstname>Stefanie</firstname>
    <lastname>Buckley</lastname>
    <Address>
      <city>Oklahoma</city>
      <street> Cowley Road</street>
      <streetno>34</streetno>
    </Address>
  </Person>
  <Person id="2">
    <firstname>Sandy</firstname>
    <lastname>Mc Gee</lastname>
    <Address>
      <city>Montgomery</city>
      <street> Hague Parkway</street>
      <streetno>27</streetno>
    </Address>
  </Person>
</Root>

我尝试过嵌套选择,例如:

 select tbl1.id '@id', tbl1.firstname, tbl1.lastname,
 (
 select city,street,streetno from test_table as tbl2
 where tbl2.id = tbl1.id
 for xml path('Address')
 ) 
 from test_table as tbl1
 for xml path('Person'), Root('Root')

但输出是这样的:

<Root>
  <Person id="1">
    <firstname>Stefanie</firstname>
    <lastname>Buckley</lastname>&lt;Address&gt;&lt;city&gt;Oklahoma&lt;/city&gt;&lt;street&gt; Cowley Road&lt;/street&gt;&lt;streetno&gt;34&lt;/streetno&gt;&lt;/Address&gt;</Person>
  <Person id="2">
    <firstname>Sandy</firstname>
    <lastname>Mc Gee</lastname>&lt;Address&gt;&lt;city&gt;Anchorage&lt;/city&gt;&lt;street&gt; North Green Clarendon Road&lt;/street&gt;&lt;streetno&gt;29&lt;/streetno&gt;&lt;/Address&gt;</Person>
  <Person id="3">

我做错了什么?

【问题讨论】:

    标签: sql sql-server xml


    【解决方案1】:

    您忘记了, type,并且您不需要从表中读取 wxtra。

    select tbl1.id '@id'
        , tbl1.firstname
        , tbl1.lastname
        , (
            select city
                , street
                , streetno
            for xml path('Address'), type
        ) 
    from test_table as tbl1
    for xml path('Person'), type, Root('Root')
    

    【讨论】:

    • 有效!我不清楚一件事:如果我不在外部查询中使用类型 - 对于 xml path('Person'), /*no type here*/, Root('Root'),输出与如果我使用 type 关键字。这是为什么? type关键字的主要用途是什么?
    • 输出相同,但没有类型指令,它是文本,而不是 xml:technet.microsoft.com/en-us/library/ms190025(v=sql.105).aspx
    • 看这个例子:select (select 1 'c' for xml path('a')/*, type*/, root('b') ) + 'zzz'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多