sql - 如何使用 XQuery 将 xml 插入另一个 xml 中的节点?

标签 sql sql-server sql-server-2005 xquery

我在 SQL Server 2005 的存储过程中有两个 xml 变量,例如@res、@student。

@res 包含

<Subject>English</Subject>
<Marks>67</Marks>
<Subject>Science</Subject>
<Marks>75</Marks>

@student 包含:

<Student> 
   <Name>XYZ</Name>
   <Roll>15</Roll>
   <Result />
   <Attendance>50</Attendance>
</Student>

我需要使用 XQuery 将 @res 的 xml 插入到 @student 变量中的节点 Result 中。

如何实现?

请帮忙。

最佳答案

在 SQL Server 2008 中,这非常简单:

DECLARE @res XML = '<Subject>English</Subject>
<Marks>67</Marks>
<Subject>Science</Subject>
<Marks>75</Marks>'


DECLARE @student XML = '<Student> 
   <Name>XYZ</Name>
   <Roll>15</Roll>
   <Result />
   <Attendance>50</Attendance>
</Student>'


SET @student.modify('insert sql:variable("@res") as first into (/Student/Result)[1]')

SELECT @student

这给了我输出:

<Student>
  <Name>XYZ</Name>
  <Roll>15</Roll>
  <Result>
    <Subject>English</Subject>
    <Marks>67</Marks>
    <Subject>Science</Subject>
    <Marks>75</Marks>
  </Result>
  <Attendance>50</Attendance>
</Student>

不幸的是,调用 .modify() 并在插入语句中使用 sql:variable 的功能仅在 SQL Server 2008 中引入 - 在以下版本中不起作用SQL Server 2005。

除了求助于丑陋的字符串解析和替换之外,我不明白如何在 SQL Server 2005 中做到这一点:

SET @student = 
    CAST(REPLACE(CAST(@student AS VARCHAR(MAX)), 
                 '<Result/>', 
                 '<Result>' + CAST(@res AS VARCHAR(MAX)) + '</Result>') AS XML)

马克

关于sql - 如何使用 XQuery 将 xml 插入另一个 xml 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886565/

相关文章:

sql-server - 使用索引 View 获取最新记录

sql-server - 评估字符串列 SQL 中的逻辑表达式

sql - sp_executesql 和表输出

sql - executeSqlScript 因 Spring for PL/SQL block 而失败

Mysql多重连接删除缺失一行

sql - 具有多个自连接的大表的空间查询执行缓慢

php - 使回显结果可点击并运行新查询

sql-server - 如何在 SQL Server 中重新创建触发器?

sql - 如何检查光标是否存在(打开状态)

sql - 选择 FOR UPDATE SKIP LOCKED 时,为什么行对多个 session 可见?