Access 2013-使用每列的不同条件更新数据表

时间:2019-01-18 12:07:36

标签: sql ms-access

我有一个大约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    |

谢谢!

2 个答案:

答案 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条语句几乎相同。通过以下选项之一,可以轻松加速解决方案

  • 创建一个动态sql查询,您将从代码中传递列名
  • 将相同的查询复制并粘贴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...
;