我有一个大约20列和大约3000行的数据库,有些字段是空白的。该数据库是自动生成的,并且信息可以更改。
示例:
| Column 1 | Column 2 | Column 3 | ... | Column 20 |
1 | BBB | BBB | BBB | | BBB |
2 | | BBB | BBB | BBB | BBB |
3 | BBB | | | BBB | BBB |
4 | BBB | BBB | BBB | BBB | |
5 | BBB | BBB | | BBB | BBB |
我将使用它来更新另一个现有表,我必须手动输入丢失的数据
| Column 1 | Column 2 | Column 3 | ... | Column 20 |
1 | BBB | BBB | BBB | | 4444 |
2 | AAA | BBB | 4444 | BBB | 4444 |
3 | BBB | AAA | BBB | BBB | BBB |
4 | 4444 | BBB | BBB | BBB | |
5 | BBB | BBB | AAA | BBB | BBB |
如您所见,我们有一些情况:
1-实际表和更新表中的信息相同(确定)
2-两个表中的信息均丢失(确定)
3-更新表中的新信息(确定)
4-在我将用来更新信息的表中,在我已经填写的实际表中仍然有空白字段。
重点是:我不想弄乱这些信息,因此我需要创建一个更新查询,该查询不会用空白字段覆盖信息。但是我需要对每一列进行此操作(第1列更新第1列,第2列更新第2列...)
结果应该是这样的:
| Column 1 | Column 2 | Column 3 | ... | Column 20 |
1 | BBB | BBB | BBB | | BBB |
2 | AAA | BBB | BBB | BBB | BBB |
3 | BBB | AAA | BBB | BBB | BBB |
4 | BBB | BBB | BBB | BBB | |
5 | BBB | BBB | AAA | BBB | BBB |
谢谢!
答案 0 :(得分:0)
正如@ June7在他的评论中提到的那样,您需要创建20条如下的更新语句
Update AT SET AT.[ColumnName] = UT.[ColumnName]
From UpdateTable UT INNER JOIN ActualTable AT
On AT.Id = UT.Id
WHERE UT.[ColumnName] is not NULL
如您所见,除了列名之外,这20条语句几乎相同。通过以下选项之一,可以轻松加速解决方案
答案 1 :(得分:0)
实际上,您可以在没有任何IIF
子句的情况下使用具有条件WHERE
的一个查询:
UPDATE UpdateTable UT
INNER JOIN ActualTable AT ON AT.Id = UT.Id
SET AT.[Column 1] = IIF(UT.[Column 1] IS NOT NULL, UT.[Column 1], AT.[Column 1]),
AT.[Column 2] = IIF(UT.[Column 2] IS NOT NULL, UT.[Column 2], AT.[Column 2]),
AT.[Column 3] = IIF(UT.[Column 3] IS NOT NULL, UT.[Column 3], AT.[Column 3]),
...other columns...
;