sql-server - 用 SQL Server 备份中的数据替换实时数据库中的 NULL 列
问题描述
我最近犯了一个可怕的错误。
在尝试解决我们在 Exact Synergy 系统中遇到的问题时,我试图用 NULL 替换一个帐户的两列中的数据,而不是用 NULL 替换所有帐户中的这两列。从备份中完全恢复不是一种选择,所以现在我想弄清楚如何替换丢失的数据。
我已将此数据库的最新备份完全还原到测试数据库,并确认我需要的数据在那里。我试图弄清楚如何正确编写将替换两列中的数据的查询。
由于这是同一数据库的备份,因此表和列的名称都相同。
- 数据库是
Synergy
和Synergy_TESTDB
- 表的所有者是
dbo
- 该表称为
Addresses
- 这些列被称为
textfield1
和textfield2
我想做的是从备份数据库中取出数据,textfield1
并textfield2
使用它来填充实时数据库中的空列或 NULL 列。
我对 SQL 非常陌生,如果有任何帮助,我将不胜感激。
解决方案
这显然是未经测试的。我对您使用此代码不承担任何责任。那就是说我想尝试帮助你。
要点是由 3 部分组成的 database.table 命名:我假设您将备份还原到同一台服务器。我还假设您在桌子上有一个主键?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
推荐阅读
- c# - Xamarin DataTemplate 定时刷新viewModel,iOS 刷新整个页面,如何像Android 一样只更新进度条?
- c++ - 无法从“初始化列表”转换为模板
- reactjs - antd table - 有条件的可拖动行渲染
- python - 有没有办法在 Python 中创建一个由列表给出的长度为“n”的元组。?
- python - 如何删除 datetime.time 并转换它?
- javascript - UTF-8 文字转换为实际的符号化字符串
- c# - 填充数据表时检查是否存在多行
- sas - 将 SAS 中的数据分组到特定的存储桶中
- powershell - 分发列表中接受的发件人、ManagedBy 和 ModeratedBy 需要 SMTP 地址
- javascript - 等待数组被填充,然后渲染这些组件