有时通过连接两个表进行更新时,出现以下错误:
请在表'X'上添加修饰符,已超出最大表版本。
是否有避免这种问题的方法?我正在使用存储过程,不能使用修饰...
这里是我要做的事的一个例子:
UPDATE Table_1 t1
SET Var_1 = (CASE WHEN t1.Var_1 = 0 THEN 0 ELSE t2.Var_1 END)
FROM Table_2 t2
WHERE t1.id =t2.id AND t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1));
我的两个表的记录不超过20,000。我已经查看过此帖子:
Netezza UPDATE from one table to another
但是它不能解决我得到的错误...
关于如何使用从一个表到另一个表的更新来解决此类问题的任何想法?
提前感谢...
您可以将查询简化为:
UPDATE Table_1 t1
SET Var_1 = t2.Var_1
FROM Table_2 t2
WHERE t1.id = t2.id AND
t1.Var_1 <> 0 AND
t1.Var_1 <> t2.Var_1
t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1)) ;
这可能会或可能不会解决资源问题,但应导致更新的行减少。
导致错误的原因不是update语句,但是表已经更改了很多次,现在是时候在表上运行GROOM VERSIONS语句了。
请查看此“ enzee社区”条目,以获取更多详细信息,包括如何识别以这种方式“修复”所需的所有表格-尽快进行,而不是稍后!