我有一张这样的表
CREATE TABLE #tmp(ColSelect NVARCHAR(400),ColParValues XML)
ColSelect 包含SQL Select语句, ColParValues 包含ColSelect中参数值的一些xml数据 例如ColSelectcontains:
"SELECT [$12]+19/[$16]-[$54]"
和col 2包含引用ColSelect参数的名称值对
如何更新我的表,用ColParValues中的相关值替换每个参数。我用这句话:
update #tmp
SET
ColSelect=REPLACE(ColSelect,c.value('@Value','nvarchar(10)'),c.value('@Res','DECIMAL(24,12)'))
FROM #tmp t1
CROSS APPLY t1.ColParValues.nodes('/root/r') AS n(c)
但是此语句仅替换每行中的一个参数值。 这是样本数据link
答案 0 :(得分:0)
这是一个解决方案:
create table #tmp (colselect varchar(200),colparvalues xml)
insert into #tmp (colselect,colparvalues)
values ('select case when [$71]+[$29]+10<25 then 1 else 0 end'
,'<root><r Value="[$71]" Res="1"/><r Value="[$29]" Res="5"/></root>'),
('select case when [$95]*[$29]+10<25 then 1 else 0 end'
,'<root><r Value="[$95]" Res="3"/><r Value="[$29]" Res="5"/></root>')
WHILE @@ROWCOUNT >0
update #tmp
SET
ColSelect=REPLACE(ColSelect,c.value('@Value','nvarchar(10)'),c.value('@Res','DECIMAL(24,12)'))
FROM #tmp t1
CROSS APPLY t1.ColParValues.nodes('/root/r') AS n(c)
WHERE t1.colselect LIKE'%'+replace(c.value('@Value','nvarchar(10)'),'[','')+'%'
select * from #tmp
drop table #tmp
然而,非常类似于游标的性能。检查性能。使用,如果确定。