2013-08-13 2 views
1

У меня есть запрос SQL для получения данных из SQL Server 2012:Колонка как содержание с FOR XML PATH запроса в SQL Server

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> 

Но я хотят получить структуру XML без второго вложенного элемента «cfTitle»:

<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

Если вам не нужно несколько элементов 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

+0

Работает отлично! Благодаря! – xVir