在 SQL Server 中,我可以将多个节点从表插入到 XML 中吗?

2023-12-10

我想根据表中的数据在存储过程中生成一些 XML。

以下插入允许我添加许多节点,但它们必须是硬编码或使用变量(sql:variable):

SET @MyXml.modify('
      insert
         <myNode>
            {sql:variable("@MyVariable")}
         </myNode>
      into (/root[1]) ') 

因此,我可以循环遍历表中的每条记录,将所需的值放入变量中并执行上述语句。

但是有没有一种方法可以通过与 select 语句结合并避免循环来做到这一点?

Edit我用过SELECT FOR XML以前做过类似的事情,但我总是发现在处理来自多个表的数据层次结构时很难阅读。我希望会有一些东西使用modify生成的 XML 更明确且更可控。


你有没有尝试过nestingFOR XML PATH 标量值函数? 通过嵌套技术,您可以将 SQL 分解为非常易于管理/可读的元素片段

免责声明:以下内容虽然改编自工作示例,但本身尚未经过字面测试

一些供普通观众参考的链接

  • http://msdn2.microsoft.com/en-us/library/ms178107(SQL.90).aspx
  • http://msdn2.microsoft.com/en-us/library/ms189885(SQL.90).aspx

最简单、最低级别的嵌套节点示例

考虑以下调用

DECLARE  @NestedInput_SpecificDogNameId int
SET @NestedInput_SpecificDogNameId = 99
SELECT [dbo].[udfGetLowestLevelNestedNode_SpecificDogName] 
(@NestedInput_SpecificDogNameId)

假设 udfGetLowestLevelNestedNode_SpecificDogName 是在没有 FOR XML PATH 子句的情况下编写的,并且对于 @NestedInput_SpecificDogName = 99,它返回单个行集记录:



@SpecificDogNameId  DogName
99                  Astro
  

但是使用 FOR XML PATH 子句,

CREATE FUNCTION dbo.udfGetLowestLevelNestedNode_SpecificDogName
(
@NestedInput_SpecificDogNameId
)
    RETURNS XML
    AS
    BEGIN

        -- Declare the return variable here
        DECLARE @ResultVar XML

        -- Add the T-SQL statements to compute the return value here
        SET @ResultVar =
            (
            SELECT 
                  @SpecificDogNameId as "@SpecificDogNameId",
                  t.DogName 
            FROM tblDogs t
            FOR XML PATH('Dog')
            )

        -- Return the result of the function
        RETURN @ResultVar

END

用户定义的函数生成以下 XML(@ 符号导致 SpecificDogNameId 字段作为属性返回)

<Dog SpecificDogNameId=99>Astro</Dog>

嵌套 XML 类型的用户定义函数

用户定义的函数(例如上面的 udfGetLowestLevelNestedNode_SpecificDogName)可以嵌套,以提供生成复杂 XML 的强大方法。

例如,函数

CREATE FUNCTION [dbo].[udfGetDogCollectionNode]()
    RETURNS XML
    AS
    BEGIN

        -- Declare the return variable here
        DECLARE @ResultVar XML

        -- Add the T-SQL statements to compute the return value here
        SET @ResultVar =
            (
                SELECT  
                [dbo].[udfGetLowestLevelNestedNode_SpecificDogName]
                        (t.SpecificDogNameId)
                FROM tblDogs t

                FOR XML PATH('DogCollection') ELEMENTS
            )
        -- Return the result of the function
        RETURN @ResultVar

END

当调用为

SELECT [dbo].[udfGetDogCollectionNode]()

可能会生成复杂的 XML 节点(给定适当的基础数据)

<DogCollection>
    <Dog SpecificDogNameId="88">Dino</Dog>
    <Dog SpecificDogNameId="99">Astro</Dog>
</DogCollection>

从这里开始,您可以继续在嵌套树中向上工作,以构建任意复杂的 XML 结构

CREATE FUNCTION [dbo].[udfGetAnimalCollectionNode]()
RETURNS XML
AS
BEGIN

DECLARE @ResultVar XML

SET @ResultVar =
(
SELECT 
dbo.udfGetDogCollectionNode(),
dbo.udfGetCatCollectionNode()
FOR XML PATH('AnimalCollection'), ELEMENTS XSINIL
)

RETURN @ResultVar

END

当调用为

SELECT [dbo].[udfGetAnimalCollectionNode]()

udf 可能会生成更复杂的 XML 节点(给定适当的基础数据)

<AnimalCollection>
  <DogCollection>
    <Dog SpecificDogNameId="88">Dino</Dog>
    <Dog SpecificDogNameId="99">Astro</Dog>
  </DogCollection>
  <CatCollection>
    <Cat SpecificCatNameId="11">Sylvester</Cat>
    <Cat SpecificCatNameId="22">Tom</Cat>
    <Cat SpecificCatNameId="33">Felix</Cat>
  </CatCollection>
</AnimalCollection>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 中,我可以将多个节点从表插入到 XML 中吗? 的相关文章

  • Android:非键盘输入法

    我正在尝试为 Android 创建一个不是传统键盘 对应于不同字母的按键行 的 IME 并且我无法找到有关如何执行此操作的有用资源 因为 SDK 中的所有代码示例都使用键盘 API它是内置函数 我在 XML 文件中设计了 IME 界面 就好
  • 根据 ss:Index 对单元格进行排序

    服务器生成的 XML 电子表格具有随机序列
  • .net 应用程序中的内存泄漏

    我正在 VB net 2005 中开发一个桌面应用程序 该应用程序包含一个间隔为 1 分钟的计时器 每次计时器计时 就会执行一组函数 大部分与数据库相关 最初 应用程序运行良好 在进程 任务管理器 中 每次调用计时器时 CPU 使用率都会达
  • Python 不擅长 XML 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • XML中的根节点、根元素和文档元素有什么区别?

    我在读W3C XML 路径语言 XPath 版本 1 0 第 5 1 节 根节点 https www w3 org TR 1999 REC xpath 19991116 root node 根节点是树的根 除非作为树的根 否则不会出现根节点
  • 将 cXML 反序列化为 C# 类

    我正在尝试将 cXML 字符串反序列化为 C 类 但是 在反序列化时 除了根元素之外 我似乎无法获得任何东西来反序列化 如何反序列化 XML 文档 https stackoverflow com questions 364253 how t
  • 为什么在python中解析xml文件时会在文件中有“/>”的地方添加空格?

    当我解析 xml 文件然后将结果写入输出文件时 原始文件中存在 gt 的地方都会添加一个空格 有什么办法可以阻止它被创建吗 我编写了一些 python 代码来更新 xml 文件中的几个字段 并认为一切正常 但在原始文件和更新后的文件之间运行
  • 带单引号的 XPATH 查询[重复]

    这个问题在这里已经有答案了 有人知道如何解决这个问题吗 单引号让我陷入困境 nodes xml gt xpath item contains catalog Billy s Blogs title 我尝试以各种方式逃避它 但都抛出错误 no
  • Android Studio图形界面中的ViewFlipper切换?

    感谢您抽出时间并在有时间的情况下回答我的问题 我对 Android 编程相当陌生 所以任何帮助都很棒 我正在使用 Android Studio 并且编写了一个包含多个布局的 XML 布局 我可以在使用 ViewFlipper showNex
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • eXist - 加载 XSLT 集合() - URIResolver 抛出异常

    环境 eXist db 4 2 1 XQuery 3 1 XSLT 2 0 在 eXist db 中 我正在加载一个 XSLT 文件 其中包含对 eXist 中集合的引用 以便使用密钥对在那里找到的文档执行搜索 此引用似乎引发了撒克逊人的错
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 即使使用 标记,XSL 也会忽略我的空格

    我在 XSL 代码中创建一个标头 其中包含多个信息字段 即 姓名 Bob 出生日期 1900 年 1 月 1 日 等 我将它们包含在标签中 如下所示
  • SQL查询获取最后两条记录的DateDiff

    我有一个名为 Event 的表 其中 eventNum 作为主键 日期作为 SQL Server 2008 R2 中的 datetime2 7 我试图获取表中最后两行的日期并以分钟为单位获取差异 这就是我目前所拥有的 Select DATE
  • Android:java.lang.OutOfMemoryError:

    我在 Android 上开发了一个使用大量图像的应用程序 可绘制文件夹中有很多图像 比如说超过 100 张 我正在开发图像动画应用程序 我使用 imageview 来显示 GIF 图像 我使用了将 gif 图像分割成多个 PNG 格式图像的
  • MySQL - 从另一个表插入与常量合并的数据

    我有一个包含一些数据的临时表 products temp 并且我有另一个需要将数据插入其中的表 产品 我需要在新记录上手动设置一些常量 例如vendor id 1等 是否可以在一次请求中插入临时表数据和常量 临时产品 product nam
  • 将 aspx 文件加载到 xmldocument 中

    我希望能够将 aspx 页面加载到 XmlDocument 变量中 我怎么做 这是我尝试过的 它期望 xml 文件而不是 aspx 页面 有没有办法将aspx页面即时转换为xml文档并加载它 谢谢 string filePath C Web
  • 线性布局高度和重量

    我有以下内容
  • 解析 XML 标签不匹配时出错

  • Android:是否可以在可绘制选择器中使用字符串/枚举?

    问题 Q1 有人设法让自定义字符串 枚举属性在 xml 选择器中工作吗 我通过以下 1 获得了一个布尔属性 但不是字符串属性 编辑 感谢您的回答 目前 android 仅支持布尔选择器 原因请参阅已接受的答案 我计划实现一个复杂的自定义按钮

随机推荐

  • 如何将结构数组传递给函数?

    我试图将一个结构数组传递给一个函数 该函数用数据填充它们 当我尝试编译代码时 我被告知有错误 In function main error expected expression before Robot t loading Profile
  • 在所有视图控制器中创建警报功能 - swift

    我正在尝试声明一个在我的应用程序中显示警报的函数 为了避免重复工作 我尝试对所有应用程序使用相同的功能 我尝试通过创建一个具有 showNotification 函数的类来做到这一点 但是当我创建该类的对象并调用该方法时 什么也没有发生 我
  • 帮助在 C# 中使用 CreateProcessWithLogonW

    我正在尝试在 Windows XP 上的 asp net C 中执行带有参数的控制台应用程序 我已经尝试过diagnostics Process 但我无法让它工作 所以我切换到CreateProcessWithLogonW 我使用了来自的代
  • 为什么Spring的FactoryBean getObject返回null?

    我想创造一个春天ConversionService与定制Converters 但是返回值ConversionServiceFactoryBean getObject is null 参见示例 Bean Autowired public Co
  • 在带有卡片的 RecyclerView 上添加搜索过滤器?

    我找到了过滤器的解决方案ListView and SearchView on RecyclerView分开 但我想把它们结合起来 有可能吗 是的 有可能你的RecyclerView Adapter可以实施Filterable 之后你必须覆盖
  • primefaces.org/ui 无法解析

    我是 JSF 和 PrimeFaces 的新手 也是 stackoverflow 的新手 并且遇到配置 部署问题 我正在使用 PrimeFaces 5 0 Tomcat 7 0 55 和 JSF 2 2 JSF 标签可以解析并工作 但 Pr
  • 类内或类外的函数声明

    我是一名正在尝试学习 C 的 JAVA 开发人员 但我真的不知道标准函数声明的最佳实践是什么 在课堂里 class Clazz public void Fun1 do something 或者在外面 class Clazz public v
  • 使用index.html时页面未从DOM卸载

    我有两个非常简单的页面 如下所示 如果我浏览到 mysite com 网络服务器将返回 index html 内容 这是正常的 如果我单击 page2 链接 jquery mobile 会将第二页加载到 DOM 中 但是doesn t从 D
  • Spring Boot + Yaml + @PropertySource + @ConfigurationProperties + 属性源文件中的列表未注入

    我正在尝试注射external yml属性到 POJO 使用 ConfigurationProperties并导入我的external yml文件使用 PropertySource 所有其他的都被注入到 POJO 中 但不是一个复杂的列表
  • 使用 PowerShell 从 SharePoint 打开 Excel 文档

    我正在尝试使用 PowerShell 从 SharePoint 打开 Excel 工作簿 我没有加载 SharePoint 管理单元 我没有它 当 PowerShell 尝试启动工作簿时 SharePoint 会提示输入凭据 问题是我们正在
  • 公式值的 Google 脚本返回 #N/A

    当我在脚本中读取时 F 列有一个公式值 显示 N A 下面是一个非常简单的脚本代码 但我无法理解为什么它显示 N A 我没有实现任何触发器 var spreadsheet SpreadsheetApp getActiveSpreadshee
  • .filter 中的 ES6 .filter

    所以我有如下数据 id 0 title happy dayys owner id 1 username dillonraphael tags value Art label Art items id 1 title happy dayys
  • 如何从 MS Word 中的行号获取文本

    是否可以使用办公自动化从 MS Word 中的给定行号获取文本 行或句子 我的意思是 如果我可以获得给定行号中的文本或作为该行一部分的句子本身 那就可以了 我没有提供任何代码 因为我完全不知道如何使用办公自动化阅读 MS Word 我可以像
  • 将字符串数组转换为整数数组

    所以基本上用户从扫描仪输入输入序列 12 3 4 etc 它可以是任意长度 并且必须是整数 我想将字符串输入转换为整数数组 so int 0 将会12 int 1 将会3 etc 有什么建议和想法吗 我正在考虑实施if charat i 获
  • GetWindowRect 在 Windows 10 中具有偏移量

    我在程序中使用 GetWindowRect 来获取桌面上窗口的坐标 这在我用于测试的十几台电脑 XP W8 1 上运行良好 但在我的一台带触摸屏的 W10 电脑上则不然 坐标向左上角有偏移 我在 google 上搜索了 Windows 10
  • 如果数据保持不变,有没有办法让同一个 SQL 查询得到不同的结果?

    当我运行这个查询时 我间歇性地得到一个不同的结果集 有时它给出 1363 个结果 有时给出 1365 个结果 有时给出 1366 个结果 数据没有改变 可能是什么原因造成的 有什么方法可以预防吗 查询看起来像这样 SELECT FROM S
  • 使用 Java 运行 Linux/Unix 文件系统?

    我需要创建一个 Java util 它将通过 Unix 和 或 Linux 文件系统递归并构建目录结构的对象模型 检索文件信息 大小 创建日期 上次访问日期等 另外我需要检索文件所在的物理存储设备上的信息 理想情况下 该实用程序是可移植的
  • Google Chart API:更改悬停图例的颜色

    所以我有一个柱形图其中一项内置功能是 您可以将鼠标悬停在图表图例中的某个项目 所谓的类别 上 然后您会在图表中相应的列周围看到一些突出显示边框 现在 我的图表中有许多列和类别 并且很难看到突出显示的系列 类别 因为默认行为仅在列周围显示 1
  • 使用“rvalueCast”的默认 Visual Studio 项目设置

    我有了一个令人震惊讽刺 gt 的发现 默认情况下 Visual Studio 2015 不兼容 C 11 我可以按照步骤操作我在这里列出对于每个项目 或使用 Notepad 或类似工具进行文件替换 但我确实注意到 命令行 属性有一个复选框
  • 在 SQL Server 中,我可以将多个节点从表插入到 XML 中吗?

    我想根据表中的数据在存储过程中生成一些 XML 以下插入允许我添加许多节点 但它们必须是硬编码或使用变量 sql variable SET MyXml modify insert