0

我正在尝试从我的临时表创建一个结构 xml 文档。临时表采用以下格式。

CREATE TABLE #Temp1 ( Name Char( 30 ), seqid integer, salary int );
INSERT INTO #Temp1 VALUES('DEAL' ,123,6)
INSERT INTO #Temp1 VALUES('DEAL' ,56,6)
INSERT INTO #Temp1 VALUES('TRACNHE' ,1253,56)
INSERT INTO #Temp1 VALUES('TRACNHE' ,5,65)
INSERT INTO #Temp1 VALUES('ASSET' ,56,23)

我正在尝试以以下形式创建 xml 格式:

<Response>
<Deal>
 <seqid="123" salary="6" />
 <seqid="56" salary="6" />
<Deal>
<TRACNHE>
 <seqid="1253" salary="56"/>
 <seqid="5" salary="65"/>
</TRACNHE>
<ASSET>
 <seqid="56" salary="23"/>
</ASSET>
</Response>

SELECT Name, (SELECT SEQID FROM #TEMP1 T WHERE T.Name = T1.Name)
FROM (SELECT DISTINCT NAME FROM #TEMP1 ) T1
FOR XML PATH('rEPONSE')
DROP TABLE #Temp1


DROP TABLE #Temp1

我尝试了上面的查询,但说子查询返回了超过 1 个值你能告诉我我在这个查询中缺少什么吗?有没有更好的方法来处理这种情况。

提前致谢

4

1 回答 1

0

根据您的要求,我看到有两种类型的复杂性

  • 您正在尝试获取带有分组项目的 xml。
  • 对于每个尝试创建具有两个属性但没有任何专有名称的 xml 元素的组,
    <seqid="1253"salary="56"/>
    而不是
    <ss seqid="1253"salary="56"/>

只需查看以下查询,它可能会有所帮助

SELECT 
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'Deal'
      FOR XML PATH('Deal') , TYPE
    )  ,
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'TRACNHE'
      FOR XML PATH('TRACNHE') , TYPE
    )   ,
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'ASSET'
      FOR XML PATH('ASSET') , TYPE
    )  
FOR XML PATH(''), ROOT('Response');
于 2015-03-19T02:16:23.843 回答