我有一个大约有100列的数据库表(笨重,我知道)。我有大约一半的这些列,我需要迭代更新以设置Is Null或""值为" TBD"。
我将所有50个需要更新的列编译成一个更新查询,其中的Access SQL代码看起来像这样......
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或空值设置为特定值(在本例中为&#34; TBD&#34;)? < / p>
我知道我可以使用选择查询来选择我需要更新的列,运行它,只需要CTRL + H来查找&amp;替换&#34;&#34; to&#34; TBD&#34;。但是,我担心这可能会在我的数据集中引入错误。我也知道我也可以逐列检查并通过更新查询更新这些值。但是,使用50+列并且这将非常耗时。我需要在整个数据集上运行的迭代更新。
我倾向于后一条路线。我仍然想知道是否有任何其他脚本选项,我可以构建一个查询来克服这样的问题,这导致我在这里。
谢谢!
答案 0 :(得分:3)
你可以运行50个查询:
UPDATE table SET column1="TBD" WHERE column1 IS NULL OR column1 = "";
优化可能是:
等。
这是安全的,只会更新您的空值(前一个查询将更新所有列,除非您先使用IFNULL
检查每个值)。
此查询样式也不会遇到过于复杂的问题
答案 1 :(得分:0)
您可以发出一个查询:
UPDATE tablename
SET column1 = iif(column1 is null or column1 = "", "TBD", column1),
column2 = iif(column2 is null or column2 = "", "TBD", column2),
. . .;
如果您不介意可能更新所有行,则可以省略where
子句。