sql - 使用 xml.modify 将参数插入到 xml 列的特定元素中

标签 sql xml sql-server-2008 tsql xquery

我想使用存储过程将作为参数传入的一些值插入到列的 xml 中的元素中。到目前为止我有这个 以下参数:

@profile_id int,
@user_id nvarchar(50),
@activity_name nvarchar(50),
@display_name nvarchar(50)

检索所需的 xml:

DECLARE @profiles_xml xml
SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE profiles.value('(Profile/ID)[1]','int')= @profile_id)

@profiles_xml 中列中的 xml 如下所示:

<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>

尝试向具有特定 ID 的用户插入事件名称和显示名称:

SET @profiles_xml.modify('
    insert
    if(/Profile/User/ID=sql:variable("@user_id"))
    then Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    else()
    as first
    into (/Profile/User/Activities)[1]')

我也试过没有成功:

 SET @devices_xml.modify('
    insert /Profile/User[ID=sql:variable("@user_id")]/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    into (/Profile/User/Activities)[1]')

还有这个:

 SET @devices_xml.modify('
insert
 /Profile/User[ID=sql:variable("@user_id")]/Activities/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
    into (/Profile/User/Activities)[1]')

正确的做法是什么?

最佳答案

declare @XML xml = '
<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>'

declare @user_id nvarchar(50) = '20'
declare @activity_name nvarchar(50) = 'activity1'
declare @display_name nvarchar(50) = 'displayname1'

set @xml.modify('insert <DisplayName>{sql:variable("@display_name")}</DisplayName>
                 into (/Profile[ID = sql:variable("@user_id")]
                       /User/Activities/
                       Activity[Name = sql:variable("@activity_name")])[1]')

结果:

<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
        <Name>activity1</Name>
        <DisplayName>displayname1</DisplayName>
      </Activity>
    </Activities>
  </User>
</Profile>

关于sql - 使用 xml.modify 将参数插入到 xml 列的特定元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234175/

相关文章:

sql-server - 大型数据库的 SQL 统计

java - 使用 DOM 生成的 XML 未格式化

java - ICEFaces 3.1 : NullPointerException raised while re-rendering a view

java - 将xml字符串转换为java对象: getting `details` as null?

mysql - 对这个简单的 INNER JOIN 查询有疑问吗?

sql - 在查询生成的 xml 上添加命名空间

SQL Server Integration Services 2008-2005兼容性

sql - 使用联接和 Group by 子句更新查询

java - HSQL 中的模式级序列

mysql - sql查询列值=列值-1