用来自SQL Server备份的数据替换实时数据库中的NULL列

时间:2018-09-23 00:20:53

标签: sql-server sql-server-2008

我最近犯了一个可怕的错误。

在尝试解决我们的Exact Synergy系统遇到的问题时,我尝试将一个帐户的两列中的数据替换为NULL,而是将所有帐户中的这两列替换为NULL。无法从备份中完全还原,因此现在我试图找出如何替换丢失的数据。

我已将该数据库的最新备份完全还原到测试数据库,并确认我需要的数据在那里。我试图弄清楚如何正确编写一个查询,该查询将替换两列中的数据。

由于这是同一数据库的备份,因此表和列的名称都相同。

  • 数据库为SynergySynergy_TESTDB
  • 表的所有者为dbo
  • 该表称为Addresses
  • 这些列称为textfield1textfield2

我想做的是从备份数据库中获取textfield1textfield2中的数据,并用它填充实时数据库中的空列或NULL列。

我对SQL非常陌生,希望对您有所帮助。

1 个答案:

答案 0 :(得分:2)

这显然未经测试。我对您使用此代码不承担任何责任。 那就是说我想帮助您。

要点是数据库的三部分。表命名:我假设您将备份恢复到同一服务器。我还假设您桌上有一个主键?并且说Synergy_TESTDB是还原的数据库:

update target 
set target.textfield1 = source.textfield1 
from Synergy.dbo.Addresses target
join Synergy_TESTDB.dbo.Addresses source on target.PrimaryKeyCol = source.PrimaryKeyCol
where target.textfield1 IS NULL

update target 
set target.textfield2 = source.textfield2 
from Synergy.dbo.Addresses target
join Synergy_TESTDB.dbo.Addresses source on target.PrimaryKeyCol = source.PrimaryKeyCol
where target.textfield2 IS NULL

(确保可以在单个更新中完成,但我正在尝试使其保持简单。)

强烈建议您先尝试另一个测试数据库。

要养成良好的习惯,就是使用这样的模式:

BEGIN TRANSACTION

-- Perform updates

-- Examine the results: select * from dbo.Blah ...

-- If results are wrong, we just rollback anyway
ROLLBACK

-- If results are what you want, uncomment the COMMIT and comment out the ROLLBACK
-- COMMIT TRANS