我有一张包含大量记录的表格(可能超过500 000或1 000 000)。 我想在整个数据库的所有表中更新一些具有相同字段名称的公共列。
我知道将单独的查询写入单个表的传统方法,但不知道一个查询来更新所有表的所有记录。
在SQL中执行此操作的最有效方法是什么,不使用某些特定于方言的功能,因此它可以在任何地方使用(Oracle,MSSQL,MySQL,PostGre等)?
附加信息:没有计算字段。有索引。使用生成的SQL语句逐行更新表。
答案 0 :(得分:2)
(这听起来像是对'专栏'进行标准化的经典案例。)
无论如何......没有。没有一个查询可以在所有表中找到该列,然后在每个表上执行UPDATE
。
在MySQL中,您可以使用表information_schema.COLUMNS
来查找包含特定命名列的所有表。使用这样的SELECT
,您可以生成(使用CONCAT()
等)所需的UPDATE
语句。但是,您需要手动运行它们(通过复制和粘贴)。
当然,您可以编写一个存储过程来将其包装到单个调用中,但这样做风险太大。如果某个其他表具有相同的列名但不应更新该怎么办?
对于多个供应商的通用代码 - 忘了!事实上,每种语法都需要进行一些调整。