【问题标题】:Grouping XML Elements in FOR XML Clause在 FOR XML 子句中对 XML 元素进行分组
【发布时间】:2015-03-19 01:24:15
【问题描述】:

我正在尝试从我的临时表创建一个结构 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 个值 您能否让我知道我在此查询中缺少什么。 有没有更好的方法来处理这种情况。

提前致谢

【问题讨论】:

    标签: sql-server select-for-xml


    【解决方案1】:

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

    • 您正在尝试获取包含分组项目的 xml。
    • 对于每个尝试创建具有两个属性的 xml 元素的组 没有任何专有名称

      而不是

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

    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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      相关资源
      最近更新 更多