【问题标题】:TSQL: How to update xml field from value from xml from other table?TSQL:如何从其他表的 xml 值更新 xml 字段?
【发布时间】:2011-11-27 16:33:29
【问题描述】:

我有两个带有 XML 字段的(某种程度上相关的)表。问题是我必须用第二个 XML 的数据更新第一个的 XML。超过100条记录。如何用 TSQL 做到这一点?

我创造了这样的东西。

UPDATE [pwi_new].[dbo].[art]
SET rest.modify('
    replace value of (/root/e[k="alien_id"]/v[1]/text())[1]
    with sql:column("new.rest.value(
        ''(/root/e[k="alien_id"/v)[1]'',''varchar(max)'')
    ")
')
FROM art_new AS new WHERE
    (
        art.title = new.title
        OR art.id = 1352 AND new.id = 119
        OR art.id = 1353 AND new.id = 120
        OR art.id = 1379 AND new.id = 146
        OR art.id = 1380 AND new.id = 147
    )
    AND art.parent = 1460

但是,它不起作用。我遇到了这个错误

XQuery [pwi_new.dbo.art.rest.modify()]: ',' or ')' 预期

在这一行:

''(/root/e[k="alien_id"/v)[1]'',''varchar(max)'')

如果可能的话,不知道如何解决。


看起来没有子查询、cte、视图等是不可能的。


TSQL: How can I update the value of an xml tag with the value of an xml tag from another related table?
我知道这个问题。我有超过 100 条记录,所以我想要一个不需要 sql:variable 的选项

【问题讨论】:

  • 这两个表有什么关系?另一篇文章看起来非常接近您所描述的内容。
  • 表格是一对一相关的。但是没有简单的键。不同之处在于我有超过 100 条记录要更新,而不是一条。
  • “它不起作用”。它会抛出错误吗?会发生什么?

标签: sql sql-server xml sql-server-2008 xquery


【解决方案1】:

阅读您问题中的链接后,我使用了这个想法,并修改了您的起始查询以包含 CTE 以删除对 sql:variable 的要求。

我现在没有任何 xml 数据来测试这个,但是这样的东西应该可以工作(语法很接近,对 xquery 不太熟悉)

WITH NewXmlData AS
(
   SELECT art.Id AS artId, new.Id AS newId
      , new.rest.value( '(/root/e[k="alien_id"/v)[1]','VARCHAR(MAX)' AS newValue
   FROM [pwi_new].[dbo].[art]
      , art_new AS new
   WHERE
   (
      art.title = new.title
         OR art.id = 1352 AND new.id = 119
         OR art.id = 1353 AND new.id = 120
         OR art.id = 1379 AND new.id = 146
         OR art.id = 1380 AND new.id = 147
   )
      AND art.parent = 1460
)
UPDATE art
SET rest.modify('
    replace value of (/root/e[k="alien_id"]/v[1]/text())[1]
    with sql:column("NewXmlData.newValue")
    ")
')
FROM [pwi_new].[dbo].[art]
INNER JOIN NewXmlData ON art.Id = NewXmlData.Id

【讨论】:

  • 没问题,我们看看其他人能想出什么。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2023-03-30
相关资源
最近更新 更多