当前位置: 首页 > 面试题库 >

从T-SQL合并XML

沈博延
2023-03-14
问题内容

我有两个单独的表TV和Receiver,它们使用FOR XML PATH命令来构建XML。我的问题是,我想将TV XML Build的输出与Receiver
XML Build的输出结合起来以创建一个XML输出。

因此,我会有类似的内容(允许我在FilterData根目录中将电视标签和接收器标签分开):

<FilterData>
<TVs>
    <TV>
        <Type>LCD</Type>
        <Brand>Samsung</Brand>
    </TV>
    <TV>
        <Type>LCD</Type>
        <Brand>Panasonic</Brand>
    </TV>
</TVs>
<Receivers>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Onkyo</Brand>
    </Receiver>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Denon</Brand>
    </Receiver>
</Receivers>
</FilterData>

问题是当我构建查询以输出此XML时

Select
Type
,Brand
From dbo.TVs
FOR XML PATH('TV'),ROOT('TVS') TYPE

Select
Type
,Brand
From dbo.Receivers
FOR XML PATH('Receiver'),ROOT('Receivers') TYPE

我不确定如何将它们组合成示例

<FilterData>
<TVs>
    <TV>
        <Type>LCD</Type>
        <Brand>Samsung</Brand>
    </TV>
    <TV>
        <Type>LCD</Type>
        <Brand>Panasonic</Brand>
    </TV>
</TVs>
<Receivers>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Onkyo</Brand>
    </Receiver>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Denon</Brand>
    </Receiver>
</Receivers>

问题答案:

使用:

 SELECT (SELECT t.type, t.brand
           FROM dbo.TVs t
        FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE),
       (SELECT r.type, r.brand
          FROM dbo.Receivers r
       FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE)
FOR XML PATH('filterdata')

测试使用:

WITH tvs AS (
    SELECT 'LCD' AS type, 'Samsung' AS brand
    UNION ALL
    SELECT 'LCD' AS type, 'Panasonic' AS brand),
     receivers AS (
    SELECT 'Surround 7.1' AS type, 'Onkyo' AS brand
    UNION ALL
    SELECT 'Surround 7.1', 'Denon')
 SELECT (SELECT t.type, t.brand
           FROM tvs t
        FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE),
       (SELECT r.type, r.brand
          FROM receivers r
       FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE)
FOR XML PATH('filterdata')


 类似资料:
  • 问题内容: 我该如何选择: 请不要告诉我可以使用,因为它们实际上来自查询。 问题答案: 没有合并和语法,但是您可以使用,如下所示。 或在评论中使用您的示例

  • 问题内容: 我有一个包含字段()的表()。我想从中选择每一行,以及表中该字段与相同的行数。 如何在SQL中完成? (像这样的伪SQL: ) 问题答案:

  • 问题内容: 假设我的数据库中有以下两段XML 此数据使用数据类型存储在两个单独的表中,此外,此XML列链接到描述所需xml格式的模式,例如 在存储过程/函数中,我想将这两个XML结构合并为以下内容: 因此,从xml的第一部分开始,我们采取了以下措施: 从第二段xml中我们获得了以下内容: 注意,这两段XML有一个共同的项目,其关键是: 在这种情况下,应在合并的xml中使用xml 2中的值(丢弃xm

  • MS SQL 有许多用于处理数字数据或字符串的内置函数。下面给出的列表包含有用的 SQL 内置函数: SQL Server COUNT 函数 - SQL Server COUNT 聚合函数用于计算数据库表中的行数。 SQL Server Max 函数 - SQL 中的 Max Aggregate 函数允许我们选择列的最大值。 SQL Server Min 函数 - SQL 中的 Min Aggre

  • 主要内容:CREATE INDEX命令,删除索引命令索引是数据库搜索引擎用来加速数据检索的唯一表格。索引是表中数据的一种指标。数据库中的索引与书末的索引相同。 例如,如果想参考书中讨论某个主题的所有页面,首先参考索引,索引一般是按字母顺序列出所有问题,然后应用于一个或多个页码。 索引选择可以帮助我们加快 where 子句出现时的查询速度,但它会减慢数据输入速度,并且包含更新和语句。不会对索引数据产生或删除任何影响。 创建索引包括一个 语句,该语句为

  • 主要内容:COMMIT命令,ROLLBACK命令,SAVEPOINT命令,SET TRANSACTION命令事务是与数据库相反执行的工作单元,从数据库读取或写入数据库的任何事务。事务是对数据库的一项或多项更改的传播。 例如,如果我们创建记录、更新或删除表的历史记录,那么也应该创建事务。控制数据完整性的操作是必不可少的,它用于处理数据库的错误。我们向组中添加一些 SQL 查询并执行事务部分。 事务属性: 事务有四个属性,称为 ACID 属性 - 原子性 - 确保与工作单元的所有操作都成功完成; 否