hello
egy tablaban van 2000 rekord, mind a 2000 rekordban van 1-1 xml ami jo nagy (20k-110k kozt!)
ezekben kell guidokat lecserelni ehhez van egy tabla benne a regi guid meg az uj giud
az elso verzio 40 masodperc alatt futott le, a masodiknal eleg 0.6 sec is ami meg mindig nagyon sok (20 perc lenne a 2000 rekod update)
hogyan lehetne tovabb gyorsitani?
XML alapu, lassu verzio
update d
set a.modify('replace value of (//Entity/@Id[.=sql:column("oldid")])[1] with sql:column("new_id")')
from p as d
join t as u
on u.oldid = d.a.value('(//Entity/@Id[.=sql:column("OldID")])[1]', 'uniqueidentifier')
VARCHAR alapu gyorsabb verzio:
-- egy kis trukk, hogy ne kelljen mindig a selectben konvertalnia az SQLnek
create table tt ( kereso varchar(1000), oldid varchar(1000), new_id varchar(1000) )
insert into tt select '%'+convert(varchar(1000),oldid)+'%' , oldid, newi from t
update d
set a = replace(convert(varchar(max),a),u.oldid,u.new_id)
from p as d
join tt u
on convert(varchar(max),a) like u.kereso
termeszetesen ezeket meg ciklusba is kell szervezni, hogy az osszes guidot lecsereljek...
-- valalhogy igy :
declare @i int
select @i = 1
while isnull(@i,0) > 0
begin
select @i = null
update d ...
set @i = @@Rowcount
print @i
end
Potyos