Sql Access中的Update query可将许多列从Null更新为value

Sql Access中的Update query可将许多列从Null更新为value,sql,ms-access,Sql,Ms Access,我有一个大约有100列的数据库表(我知道它很庞大)。我有大约一半的这些列,我将需要迭代更新以将其设置为Null或“”值为“TBD” 我用Access SQL代码将所有50个需要更新的列编译成一个更新查询,代码如下所示 UPDATE tablename SET tablename.column1="TBD", tablename.column2="TBD", tablename.column3="TBD".... WHERE tablename.column1 Is Null OR tablena

我有一个大约有100列的数据库表(我知道它很庞大)。我有大约一半的这些列,我将需要迭代更新以将其设置为Null或“”值为“TBD”

我用Access SQL代码将所有50个需要更新的列编译成一个更新查询,代码如下所示

UPDATE tablename
SET tablename.column1="TBD", tablename.column2="TBD", tablename.column3="TBD"....
WHERE tablename.column1 Is Null OR tablename.column1="" OR tablename.column2 Is Null OR tablename.column2="" OR tablename.column3 Is Null OR tablename.column3=""....
两个问题:此50列查询收到“查询太复杂”错误

这个查询在功能上也是错误的……因为WHERE语句导致这些列中的数据丢失。由于OR子句,正在更新填充了我不想更新的值的记录

我的问题是如何更新所有这些列,并将它们的null或空值设置为特定值(在本例中为“TBD”)?

我知道我可以使用select查询来选择需要更新的列,运行它,然后只需按住CTRL+H键来查找并将“”替换为“TBD”。然而,我担心这会给我的数据集带来错误。我还知道我还可以逐列浏览,并通过更新查询更新这些值。但是,如果有50多列,这将非常耗时&我需要在整个数据集上运行迭代更新

我倾向于后一条路线。我仍然在想,是否还有其他脚本化的选项可以构建到查询中来克服这样的问题,这让我来到这里


谢谢大家!

您可以只运行50个查询:

UPDATE table SET column1="TBD" WHERE column1 IS NULL OR column1 = "";
优化可以是:

  • 创建一个临时表,用于确定哪些行实际上需要更新:连接所有列值,以便单个NULL或空值将在临时表中生成一条记录。这样,您只需扫描基表一次
  • 使用该表中的键仅关注这些行
等等。 这是安全的,只会更新空值(与上一个查询一样,除非先用
IFNULL
检查每个值,否则将更新所有列)。
此查询样式也不会遇到太复杂的问题您可以只运行50个查询:

UPDATE table SET column1="TBD" WHERE column1 IS NULL OR column1 = "";
优化可以是:

  • 创建一个临时表,用于确定哪些行实际上需要更新:连接所有列值,以便单个NULL或空值将在临时表中生成一条记录。这样,您只需扫描基表一次
  • 使用该表中的键仅关注这些行
等等。 这是安全的,只会更新空值(与上一个查询一样,除非先用
IFNULL
检查每个值,否则将更新所有列)。
此查询样式也不会遇到太复杂的问题您可以通过以下方式发出一个查询:

UPDATE tablename
    SET column1 = iif(column1 is null or column1 = "", "TBD", column1),
        column2 = iif(column2 is null or column2 = "", "TBD", column2),
        . . .;

如果您不介意潜在地更新所有行,您可以省略
where
子句。

您可以发出一个查询,如下所示:

UPDATE tablename
    SET column1 = iif(column1 is null or column1 = "", "TBD", column1),
        column2 = iif(column2 is null or column2 = "", "TBD", column2),
        . . .;
如果您不介意潜在地更新所有行,您可以省去
where
子句。

Nz不会在
上触发。您尚未在解决方案中说明非空字符串。你可以去IIF(nz(column1)=“”,“待定”,column1)@ErikvonAsmuth
nz()
不将
视为
NULL
。我修正了答案。据我所知,Nz不会在
上触发。您尚未在解决方案中说明非空字符串。你可以去IIF(nz(column1)=“”,“待定”,column1)
@ErikvonAsmuth
nz()
不将
视为
NULL
。我修正了答案。