SQL Server 2008:使用 XML DML 重命名元素?

2024-01-15

是否可以使用 XML DML 语句重命名非类型化 XML 列中的元素?

我正在更新 XML 列上的 XML 架构集合,需要通过重命名一个元素来修补现有 XML 实例,然后才能应用最新架构。

据我从文档中可以看出,您只能插入/删除节点或替换它们的值。


俗话说,“有志者事竟成”

这里有两种方法:第一种方法是简单地将以前的 xml 替换为新的 xml,该新的 xml 是根据原始 xml 构造的,并具有新的元素名称。在我的示例中,我已将 Legs/Leg 更改为 Limbs/Limb,除了最简单的模式之外,这可能会变得非常复杂

其次,结合插入和删除的更合适的方法。

我将它们组合成一个简单的例子:

declare @xml as xml = '<animal species="Mouse">
  <legs>
    <leg>Front Right</leg>
    <leg>Front Left</leg>
    <leg>Back Right</leg>
    <leg>Back Left</leg>
  </legs>
</animal>'

set @xml = (select 
     t.c.value('@species', 'varchar(max)') as '@species'
    ,(select
     ti.C.value('.', 'varchar(max)') 
from @Xml.nodes('//animal/legs/leg') ti(c) for xml path('limb'), /* root('limb'), */type) as    limbs   
from @xml.nodes('//*:animal') t(c) for xml path('animal'), type)

select @xml;

while (@xml.exist('/animal/limbs/limb') = 1) begin
    /*insert..*/
    set @xml.modify('
            insert <leg>{/animal/limbs/limb[1]/text()}</leg>
            before (/animal/limbs/limb)[1]
        ');
    /*delete..*/
    set @xml.modify('delete (/animal/limbs/limb)[1]');
end

set @xml.modify('
        insert <legs>{/animal/limbs/leg}</legs>
        before (/animal/limbs)[1]
    ');
set @xml.modify('delete (/animal/limbs)[1]');

select @xml;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2008:使用 XML DML 重命名元素? 的相关文章

  • 为什么MERGE语句的目标表不允许启用规则?

    我们有一个使用以下 SQL 更新数据库的过程 IF NOT EXISTS SELECT FROM Target Table WHERE Target Table ID BEGIN INSERT END ELSE BEGIN UPDATE E
  • 如何获取 dm_exec_sql_text 的参数值

    我正在运行以下语句来查看 sql server 中正在执行哪些查询 select from sys dm exec requests r cross apply sys dm exec sql text r sql handle where
  • 使用输出在合并语句中设置变量

    我有一个合并语句应该始终更新或插入一条记录 我想记住变量中该语句的 ID 它看起来像这样 DECLARE int int MERGE dbo table AS A USING SELECT stringtomatch AS string A
  • SQL Server:删除具有外键约束的行:事务可以覆盖约束吗?

    我有一些添加了外键约束的表 它们与代码生成一起使用 以在生成的存储过程中设置特定的联接 是否可以通过在事务中调用多个删除来覆盖这些约束 特别是 C 中的 TransactionScope 或者绝对需要级联删除吗 不要使用级联删除 这样可能会
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 关于数据库变更的通知

    我正在尝试一种场景 其中我想使用任何用户提交的更改来更新在不同 PC 上运行的桌面 UI 例如 Application1 安装在 PC1 PC2 和 PC3 上 假设所有 PC 都运行此应用程序 假设 PC1 上的用户 1 更改数据并提交到
  • 为什么Asp.net MVC4不能使用SQL Server Session状态存储的cookieless

    全部 这是我在 Asp net MVC4 应用程序中的 Web 配置 我发现如果我将 cookieless 设置为 false 一切都会正常 但如果我不想使用 cookie 那么应用程序就无法工作 当我调试应用程序时 我发现控制器无法接收来
  • 表值函数降低了我的查询性能

    今天我在尝试让查询按照我期望的方式执行时经历了一段可怕的时光 我不得不对昨天查询中的表值函数进行轻微更改 该更改对查询产生了巨大的性能影响 在评估执行计划并查看统计 IO 和时间后 我发现因为我更改了函数以返回表变量而不仅仅是结果集 所以它
  • SQL Server 2008中的分割函数

    I have Table1像这样的列 ID Name 1 MSSQL 2 MySQl 3 Oracle In Table2 我有一个像这样的专栏 Databasename 1 3 2 1 2 我的输出应该是 Databasename MSS
  • 使用 Excel 创建包含特殊字符的 CSV 文件,然后使用 SSIS 将其导入数据库

    获取此 XLS 文件 然后 我将此 XLS 文件另存为 CSV 然后使用文本编辑器将其打开 这是我所看到的 Col1 Col2 Col3 Col4 Col5 Col6 Col7 1 ABC AB C D E F 03 3 2 我看到 C 列
  • 我的触发器是如何被删除的?

    如果你能弄清楚这一点 那么你就是一位真正的 SQL 大师 这是我见过的最奇怪的事情之一 我已向数据库中的表添加了一个触发器 服务器是 SQL 2008 触发器不会做任何特别棘手的事情 当某些字段发生更改时 只需更改表中的 LastUpdat
  • 对存储过程内容的只读访问

    是否可以设置 SQL Server 来为开发人员提供对生产数据库上存储过程内容的只读访问权限 您可以授予他们VIEW DEFINITION这些进程的特权 See here http msdn microsoft com en us libr
  • sql中的sumProduct

    我正在尝试在服务器上的表中实现 sumproduct 来自 Excel select into myTable2 from myTable1 select a b c d e select c e 100 3423 from myTable
  • TSQL 返回 NO 或 YES,而不是 TRUE 或 FALSE

    如果某些列返回 FALSE 如何显示不同的值 例如 COLUMN BASIC 返回 FALSE 但我需要向用户显示 YES 或 NO 情况为 FALSE 返回 NO 如果是 varchar 或 bit 则处理 NULL case when
  • SQL Server 将一个表中的所有行复制到另一个表中,即重复表

    我想保留一张桌子作为历史并用空桌子替换它 我如何通过 Management Studio 执行此操作 将您的表复制到要存档的表中 SELECT INTO ArchiveTable FROM MyTable 删除表中的所有条目 DELETE
  • 如何在 SELECT 子句中编写带点(“.”)的列名?

    我正在尝试使用 编写列名称 没有成功 sample SELECT PrmTable Value MAX Value FROM TempTable or SELECT MAX Value AS PrmTable Value FROM Temp
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • Sql Server 2008 NVARCHAR 长度-1

    如果长度为 1 这意味着什么 这是我的 tbl 结构 Name nvarchar no 1 正如 JNK 在评论中指出的那样 这意味着MAX Name NVARCHAR MAX 来自MSDN http msdn microsoft com
  • 内置函数将每个单词的第一个字母大写

    如果 SQL Server 中已存在此类函数 我不想为此创建自定义函数 输入字符串 This is my string to convert预期输出 This Is My String To Convert SET ANSI NULLS O
  • SQL Server 连接尝试记录在哪里?

    SQL Server 是否有用于尝试连接的外部日志文件或内部表 或者此类信息是否放置在 Windows 事件日志中的某个位置 您可以启用连接日志记录 对于 SQL Server 2008 您可以启用登录审核 在 SQL Server Man

随机推荐