【发布时间】:2012-12-23 07:36:24
【问题描述】:
我有像这样的源表和表目标表
Source:
Column1 Column2 Column3 Column4
Destination:
Column1 Column2 Column5 Column6
如何在 SQL SERVER 中实现这个逻辑
IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
Do something else
问题是,我必须处理十亿行,那么实现上述逻辑的最佳方法是什么
EDIT1
IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
**INSERT SOURCE table row to the destination**
如何使用合并语句实现相同的功能,因为我只需要考虑两列
【问题讨论】:
-
更让您头疼的是,如果您要更新数十亿行,您需要考虑的另一个问题是可用性。你能负担得起关闭数据库(单用户)来执行更改吗?请注意,当您像这样运行大规模更新时,对您的应用程序响应时间的影响将是巨大的,并且可能需要数小时。如果您可以使数据库脱机,那就太好了;如果没有,那么您需要弄清楚某种“批处理”。
-
@JosephLess 感谢您的建议,值得考虑。但由于所有 OLAP 多维数据集和报表都链接到数据库,我无法关闭数据库。
-
@Zerotoinfinite 如果有 10 亿行或者你不能有停机时间 - 查看蚕食更新(stackoverflow.com/questions/2082751 是一个例子)。随着十亿行的单次更新,您的事务日志会发疯,锁定也会伤害所有其他用户。
标签: sql sql-server sql-server-2008 join sql-update