我主要使用存在方法将行合并到表中,但我正在考虑切换到行计数方法。有什么理由不这样做吗?
存在方法
If Exists(Select * From Table Where ID = @ID) Begin
Update Table Set Value = @Value Where ID = @ID
End Else Begin
Insert Into Table (Value) Values (@Value);
End
行计数方法
Update Table Set Value = @Value Where ID = @ID
If (@@RowCount = 0) Begin
Insert Into Table (Value) Values (@Value);
End
性能
行计数方法似乎要快得多。在大约有 50k 行的表上,它的计时时间是 Exists 方法 时间的 1/5。这些测试不太科学,但即使保守的 +/- 15% 也相当可观。这是我想转行的主要原因。
注意
为了便于阅读,这些示例特意变得简单。它们绝不反射(reflect)我的实际情况。
最佳答案
我没有看到任何特别的问题。不过,您必须尝试哪一个性能更高(尽管我认为这在本例中微不足道)。但正如 Cade 指出的,使用事务。
另请注意,对于 SQL Server 2008,您可以使用 MERGE 语句(以防万一您要升级)。
关于sql - SQL Server 2005 的首选合并方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597357/