2

我有一个table A包含一个文本列。在我的存储过程中,我有一个临时表,其中包含两列 - 旧值和新值,有许多行。我需要用临时表中指定的新值替换所有出现的旧值,在我的table A.

表 A 中的文本字段与临时表中的旧值不同,因此我不能使用连接。文本列值可以是“那里什么都没有”。临时表中可能有一行 oldvalue='there' 和 newvalue='here'。最后,列值应替换为“here is nothing here”。这应该适用于 中列的所有行table A

一种选择是遍历临时表(不推荐)。有没有更好/优雅/优化的方法来做到这一点?

4

1 回答 1

1

这应该这样做。

;with r as (
  select 
    row_number() over(order by oldv) rn
    ,oldv
    ,newv
  from #replacevalues
)
,
res as (
  select 
    0 as ver
    ,txt as oldcte
    ,txt as newcte
  from tablea
  union all
  select 
    ver+1
    ,oldcte
    ,replace(newcte,oldv,newv)
  from res 
  join r 
    on r.rn=ver+1
)
update t
  set txt = res.newcte
from tablea t
join res on t.txt = res.oldcte
where res.ver = (select max(ver) from res)
于 2013-03-06T13:28:29.173 回答