1

我有一个 SQL 查询来从 SQL Server 2012 获取数据:

select dbo.TRIM(cfProj.cfProjId) as "cfProjId", 
       dbo.TRIM(cfProj.cfAcro) as "cfAcro",
       (SELECT cfLangCode as "@cfLangCode", cfTrans as "@cfTrans", cfProjTitle.cfTitle 
        FROM dbo.cfProjTitle
        WHERE dbo.cfProjTitle.cfProjId = dbo.cfProj.cfProjId
       FOR XML PATH('cfTitle'), type)  
from cfProj FOR XML PATH('cfProj')

此 SQL 返回如下数据结构:

<cfProj>
  <cfProjId>00001111</cfProjId>
  <cfAcro>222</cfAcro>
  <cfTitle cfLangCode="ru" cfTrans="h">
    <cfTitle>some title here</cfTitle>
  </cfTitle>
</cfProj>

但我想获得没有第二个嵌套“cfTitle”元素的 XML 结构:

<cfProj>
  <cfProjId>00001111</cfProjId>
  <cfAcro>222</cfAcro>
  <cfTitle cfLangCode="ru" cfTrans="h">some title here</cfTitle>
</cfProj>

这一行的区别:<cfTitle cfLangCode="ru" cfTrans="h">some title here</cfTitle>

有什么想法可以得到理想的结果吗?

4

1 回答 1

4

如果您不需要多个 cfTitle 元素,您可以使用 marc_s 解决方案,但如果您需要 - 您可以试试这个:

select 
    p.cfProjId, 
    p.cfAcro,
    (
        select
            pt.cfLangCode as [@cfLangCode],
            pt.cfTrans as [@cfTrans],
            pt.cfTitle as [text()]
        from cfProjTitle as pt
        where pt.cfProjId = p.cfProjId
        for xml path('cfTitle'), type
    )
from cfProj as p
for xml path('cfProj')

sql fiddle demo

于 2013-08-13T17:01:31.597 回答