T-SQL从备份数据库表拷贝数据到当前数据库表

在开发过程中定期备份数据库是一个好习惯。今天在更新本地开发数据库的一张配置表时不小心将全表更新了(选择执行SQL语句时漏掉了后面的where语句)。由于开发过程中至少每隔一个月有一次数据库备份,所以可以很容易的使用备份数据库恢复(并覆盖)数据。不过从上次备份到现在,当前数据库里已经保存了一些新的数据,这些新的数据还想继续使用,所以就不能直接采用整个数据库都覆盖的恢复方式。针对本次这个情况,只需要恢复配置表即可,于是有下面的恢复数据语句。

declare @v1 int
declare @v2 int
declare @v3 int
declare @v4 int
declare @v5 nvarchar(max)

declare @v10 int
declare @v20 int
declare @v30 int
declare @v40 int
declare @v50 nvarchar(max)

declare @index int
declare @changeCount int
set @index=1
set @changeCount=0

declare @maxIndex int
select @maxIndex=MAX(SettingValueID) from bkp_db.dbo.ApplicationSettingValue
print @maxIndex
if(@maxIndex<(select MAX(SettingValueID) from current_db.dbo.ApplicationSettingValue))
begin
  select @maxIndex=MAX(SettingValueID) from current_db.dbo.ApplicationSettingValue
end
print @maxIndex

while(@index<@maxIndex)
begin
  select @v1=ISNULL(F1,0),@v2=ISNULL(F2,0),@v3=ISNULL(F3,0),@v4=ISNULL(F4,0),@v5=ISNULL([Value],'') from bkp_db.dbo.ApplicationSettingValue where SettingValueID=@index
  select @v10=ISNULL(F1,0),@v20=ISNULL(F2,0),@v30=ISNULL(F3,0),@v40=ISNULL(F4,0),@v50=ISNULL([Value],'') from current_db.dbo.ApplicationSettingValue where SettingValueID=@index
  if(@v1=@v10 and @v2=@v20 and @v3=@v30 and @v4=@v40 and @v5<>@v50)
  begin
    update current_db.dbo.ApplicationSettingValue set [Value]=@v5 where SettingValueID=@index
    set @changeCount=@changeCount+1
  end
  set @index=@index+1
end

print @changeCount
posted @ 2012-11-20 18:12  josephchan  阅读(926)  评论(0编辑  收藏  举报