1
ここで見つけた以前に実行された例を使用して、私は入手困難な固有の状況に立ち往生しました。SQL Server 2008再帰的cte文字列元の値を維持する置換
ここで適応コード
declare @RandomString table (ID int not null,ItemValue varchar(500) not null)
insert into @RandomString(ID,ItemValue)
values (1,'<Strings><B1>String1</B1><B2>String2</B2><B3>String3</B3><B4>String4</B4></Strings>')
declare @SearchCharReplacement table (Original varchar(500) not null,Replacement varchar(500) not null)
Insert into @SearchCharReplacement(Original, Replacement)
values ('String1', 'abc'), ('String2', 'efg'),
('String3', 'hij'), ('String4', 'klm')
;With Replacements as (
select ID,ItemValue,0 as RepCount
from @RandomString
union all
select ID,SUBSTRING(REPLACE(ItemValue,Original, Replacement),1,500),rs.RepCount+1
from Replacements rs
inner join @SearchCharReplacement scr on CHARINDEX(scr.Original,rs.ItemValue) > 0
)
, FinalReplacements as (
select ID,ItemValue,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RepCount desc) as rn
from Replacements
)
update rs set ItemValue = fr.ItemValue
from @RandomString rs
inner join FinalReplacements fr on rs.ID = fr.ID and rn = 1
select * from @RandomString
結果が
<Strings><B1>abc</B1><B2>def</B2><B3>ghi</B3><B4>jkl</B4></Strings>
私が本当に希望するすべてのヘルプは非常にいくつかの内部で
私はオリジナルを追加しようとしました+ '|' +置き換えますが、再帰エラーが発生します。予想通り。ここには2番目の文字列の例があります String1 –