Sql XML显式分解和添加问题

Sql XML显式分解和添加问题,sql,ssms,ssms-2012,Sql,Ssms,Ssms 2012,因此,我目前编写了一些针对XML EXPLICIT的SQL语句,除了我遇到的两件事之外,一切都很顺利 当我尝试添加这个额外的4标签层时,它只是在Chase部分的底部添加PatientData,而不是在每个Chase中添加 如下 <ChaseRequests dtGenerated="Friday, January 30, 2015 5:24:39 PM"> <Chases> <Chase id="12345"> <Practice

因此,我目前编写了一些针对XML EXPLICIT的
SQL语句,除了我遇到的两件事之外,一切都很顺利

当我尝试添加这个额外的4标签层时,它只是在Chase部分的底部添加PatientData,而不是在每个Chase中添加

如下

<ChaseRequests dtGenerated="Friday, January 30, 2015 5:24:39 PM">
  <Chases>
    <Chase id="12345">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
    </Chase>
    <Chase id="12346">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
      <PatientData />
      <PatientData />
    </Chase>
  </Chases>
</ChaseRequests>
我的理想结果

<ChaseRequests dtGenerated="Friday, January 30, 2015 5:24:39 PM">
    <Vendor ID="Derp"/>
    <Request ID="Herp"/>
  <Chases>
    <Chase id="12345">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
      <PatientData />
    </Chase>
    <Chase id="12346">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
      <PatientData />
    </Chase>
  </Chases>
</ChaseRequests>

仅供参考-我计划在PatientData标记中放置更多嵌套标记-我只希望PatientData标记出现在每个“Chase”区域中


任何信息将不胜感激

forxml EXPLICIT
按顺序处理行,因此必须对行施加与其层次关系相匹配的顺序。像这样:

SELECT
    tag,
    parent,
    [ChaseRequests!1!dtGenerated],
    [Chases!2!],
    [Chase!3!id],
    [Chase!3!PracticeId!CData],
    [Chase!3!AccountId!CData],
    [Chase!3!RequestingCompany!CData],
    [PatientData!4!Element]
FROM (SELECT 
    1 Tag,
    NULL Parent,
    'Friday, January 30, 2015 5:24:39 PM' as [ChaseRequests!1!dtGenerated],
    NULL as [Chases!2!],
    NULL as [Chase!3!id],
    NULL as [Chase!3!PracticeId!CData],
    NULL as [Chase!3!AccountId!CData],
    NULL as [Chase!3!RequestingCompany!CData],
    NULL as [PatientData!4!Element]
UNION ALL
SELECT 
    2 Tag,
    1 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
UNION ALL
SELECT 
    3 Tag,
    2 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    c.ChartID,
    '82791',
    '8279101',
    'DERP',
    NULL
FROM Charts c 
WHERE ChartID in (12345,12346)
UNION ALL
SELECT 
    4 Tag,
    3 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    c.ChartID,
    NULL,
    NULL,
    NULL,
    NULL
FROM Charts c 
WHERE ChartID in (12345,12346)
) X
order by [ChaseRequests!1!dtGenerated],
    [Chases!2!],
    [Chase!3!id],
    Tag
FOR XML EXPLICIT

注意:这只会变得更复杂,你越深入。你真的应该考虑切换到<代码>路径>代码>或者<代码> Auto <代码>,以使自己更容易。

谢谢输入!这肯定帮了我解决了筑巢的问题——不确定你是否能帮我解决我需要的“额外”两条线。如果我能保留我的CDATA标记,我肯定会使用XML路径:(
<ChaseRequests dtGenerated="Friday, January 30, 2015 5:24:39 PM">
    <Vendor ID="Derp"/>
    <Request ID="Herp"/>
  <Chases>
    <Chase id="12345">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
      <PatientData />
    </Chase>
    <Chase id="12346">
      <PracticeId><![CDATA[82791]]></PracticeId>
      <AccountId><![CDATA[8279101]]></AccountId>
      <RequestingCompany><![CDATA[DERP]]></RequestingCompany>
      <PatientData />
    </Chase>
  </Chases>
</ChaseRequests>
SELECT
    tag,
    parent,
    [ChaseRequests!1!dtGenerated],
    [Chases!2!],
    [Chase!3!id],
    [Chase!3!PracticeId!CData],
    [Chase!3!AccountId!CData],
    [Chase!3!RequestingCompany!CData],
    [PatientData!4!Element]
FROM (SELECT 
    1 Tag,
    NULL Parent,
    'Friday, January 30, 2015 5:24:39 PM' as [ChaseRequests!1!dtGenerated],
    NULL as [Chases!2!],
    NULL as [Chase!3!id],
    NULL as [Chase!3!PracticeId!CData],
    NULL as [Chase!3!AccountId!CData],
    NULL as [Chase!3!RequestingCompany!CData],
    NULL as [PatientData!4!Element]
UNION ALL
SELECT 
    2 Tag,
    1 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
UNION ALL
SELECT 
    3 Tag,
    2 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    c.ChartID,
    '82791',
    '8279101',
    'DERP',
    NULL
FROM Charts c 
WHERE ChartID in (12345,12346)
UNION ALL
SELECT 
    4 Tag,
    3 Parent,
    'Friday, January 30, 2015 5:24:39 PM',
    NULL,
    c.ChartID,
    NULL,
    NULL,
    NULL,
    NULL
FROM Charts c 
WHERE ChartID in (12345,12346)
) X
order by [ChaseRequests!1!dtGenerated],
    [Chases!2!],
    [Chase!3!id],
    Tag
FOR XML EXPLICIT