如何在DB2中更新前100行
如何在DB2中更新前100行
我知道在标准的SQL中可以这样做:\n
update top (100) table1 set field1 = 1
\n(参考:how can I Update top 100 records in sql server)\n但是在DB2中是不允许这样做的。有人可以告诉我如何在DB2中实现相同的结果吗?谢谢!
如何在DB2中更新前100行
问题原因:
- SQL是无序的,所以没有所谓的“top”行,除非明确定义。
解决方法:
- 确保表上有某种唯一键。
- 使用以下SQL语句更新前100行:
UPDATE table1 SET field1 = 1 WHERE table1Key IN (SELECT table1Key FROM table1 WHERE field1 <> 1 ORDER BY field1 FETCH FIRST 100 ROWS ONLY)
- 为什么要每次只更新100行?你真正想解决什么问题?
- 如果行没有唯一标识符,可以根据提供的示例找到类似的解决方案。不过,100只是一个限制,用来避免在表中有成千上万条记录时获取整个表。我有一个在JEE服务器上运行的定期进程,跨多个实例检查此表中的记录,每次获取100条记录并将其处理到另一个位置。我想通过批量ID标记前100条,然后选择它们,循环处理,最后根据批量ID删除。
- 另一种更简洁的方法是:
UPDATE (SELECT table1Key FROM table1 WHERE field1 <> 1 ORDER BY field1 FETCH FIRST 100 ROWS ONLY) SET field1 = 1