前些天更新数据时,update语句之后没加Where语句,结果更新后数据结果都是一样了,麻烦了,幸好有备份的数据,但想了想,不用数据库的还原功能应该也可以吧,用SQL语句应该可以还原的。 于是,就写了个SQL语句,供不小心,忘记更新数据少加Where语句的朋友看看 。
declare @tid int declare @fid int declare @i int declare @j int set @j=(select count(*) from tbl1.dbo.dnt_topics) set @i=1 while @i<@j begin set @tid = (select tid from ( select ROW_NUMBER() over (order by tid asc ) as Row, tid,fid from dnt_topics ) as sp where Row=@i) set @fid=(select fid from ( select ROW_NUMBER() over (order by tid asc ) as Row, tid,,fid from dnt_topics ) as sp where Row=@i) update tbl2.dbo.dnt_topics set fid=@fid where tid=@tid set @i=@i+1 end
其中,@tid表示更新限制的条件,@fid表示要更新的数据,定义@i和@j是为了方便方便循环更新,在这T_SQL语句中用了SQL2005自带的函数ROW_NUMBER(),
这个函数是给查询的结果自动添加一列,以便知道当前数据的位置。