【问题标题】:Swapping data between two XML files in sql script?在 sql 脚本中的两个 XML 文件之间交换数据?
【发布时间】:2013-12-04 17:37:12
【问题描述】:

我的一个数据库表中有一个包含 xml 文件的列。但是,这些文件内部有标签需要交换,有没有办法用 sql 脚本自动完成?

<ViewcenterLayout>
  <viewcenter_config>
    <gl_type>EStop</gl_type>
    <data_access>
      <access_as>INPUT</access_as>
      <access_id>1391</access_id>
      <parent_id>0</parent_id>
      <server_id>17</server_id>
      <subsystem>0</subsystem>
    </data_access>
    <data>
      <dimension x="1" y="1" z="1" />
      <curve_info ir="0" or="0" degree="0" />
      <position x="416.96044921875" y="24.0833339691162" z="563.815856933594" />
      <rotation x="0" y="180" z="0" />
      <color>FFD3D3D3</color>
      <is_position_relative>false</is_position_relative>
    </data>
  </viewcenter_config>
</ViewcenterLayout>

这些是文件的外观和

 <position>

标签需要交换。

【问题讨论】:

  • 标签位置需要调换?去哪里?换了什么?您还使用什么 RDBMS?
  • 说有两行 cos190101-1 和 cos190101-2 是他们的 pk 这些需要交换一个包含 xml 文件的列。 MsSql
  • 不是整列对吧?只是位置节点?
  • 是的,对不起,只是位置节点。

标签: sql-server xml sqlxml


【解决方案1】:

您需要分两步完成此操作。首先从另一个节点添加位置节点,然后删除已经存在的位置节点。

declare @PK1 varchar(11);
declare @PK2 varchar(11);

set @PK1 = 'cos190101-1';
set @PK2 = 'cos190101-2';

-- Add the new position node after the one that already exists
update T
set X.modify('insert sql:column("Pos") after (ViewcenterLayout/viewcenter_config/data/position)[1]')
from (
     select T.X.query('ViewcenterLayout/viewcenter_config/data/position') as Pos,
            case T.PK when @PK1 then @PK2 else @PK1 end as PK
     from T
     where T.PK in (@PK1, @PK2)
     ) as S
where T.PK = S.PK;

-- Delete the first position node
update T
set X.modify('delete (ViewcenterLayout/viewcenter_config/data/position)[1]')
where T.PK in (@PK1, @PK2);

SQL Fiddle

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多