我最近犯了一个可怕的错误。
在尝试解决我们的Exact Synergy系统遇到的问题时,我尝试将一个帐户的两列中的数据替换为NULL,而是将所有帐户中的这两列替换为NULL。无法从备份中完全还原,因此现在我试图找出如何替换丢失的数据。
我已将该数据库的最新备份完全还原到测试数据库,并确认我需要的数据在那里。我试图弄清楚如何正确编写一个查询,该查询将替换两列中的数据。
由于这是同一数据库的备份,因此表和列的名称都相同。
Synergy
和Synergy_TESTDB
dbo
Addresses
textfield1
和textfield2
我想做的是从备份数据库中获取textfield1
和textfield2
中的数据,并用它填充实时数据库中的空列或NULL列。
我对SQL非常陌生,希望对您有所帮助。
答案 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