今天客户在处理问题的时候,自己处理问题了,最后发现有错误了
问题是这样的,要存的数据保存错表了,数据还是挺麻烦的在表的xml字段中了
因为设计到多个表而且需要几个自动一时小不到什么好的办法就用了游标来解决了
因为可以比较急着要啊,就直接给他们了以下是代码
declare @id int
declare @userid int
declare @num int
declare scursor cursor for
select id,userid,StorageXml.value('(//myroot/gem[@id=17885]/@num)[1]','int') from dccwms_userhero where StorageXml.value('(//myroot/gem[@id=17885]/@num)[1]','int') > 0
open scursor
fetch next from scursor into @id,@userid,@num
while ( @@fetch_status=0 )
begin
update dccwms_winduser set gkey=gkey+@num where id=@userid
update dccwms_userhero set StorageXml.modify('replace value of (/myroot/gem[@id=17885]/@num)[1] with ""') where id=@id
update dccwms_userhero set StorageXml.modify('replace value of (/myroot/gem[@id=17885]/@id)[1] with ""') where id=@id
fetch next from scursor into @id,@userid,@num
end
close scursor
deallocate scursor
还好没有出什么问题,以前一直听说游标的效率不高感觉总是不是很好
想了好久就没有想到什么办法呢
晚上睡觉是忽然想到update应该能够多表更新的吧,第二天醒来查询了一下果然有这样的写法的
下面一个简单的多表更新查询的例子
UPDATE A
SET A.c2 =B.c3
from A ,B
where A.c1=B.c1
UPDATE A
SET A.c2 =B.c3
from A inner join B on A.c1=B.c1
看了这个相信大家应该都明白了吧