我主要使用存在方法将行合并到表中,但我正在考虑切换到行计数方法。有什么理由不去吗?
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
行计数方法似乎要快得多。在一个约有5万行的表格上,它以存在方法的1/5时钟计时。测试不是太科学,但即使保守的+/- 15%也是如此。这是我想切换的主要原因。
注意
为了便于阅读,这些例子的目的很简单。它们绝不反映我的实际情况。
答案 0 :(得分:3)
我没有看到任何特别的问题。你必须尝试哪一个更高效(尽管我认为在这个例子中这是微不足道的)。但正如Cade指出的那样,使用交易。
另请注意,对于SQL Server 2008,您可以使用MERGE语句(以防您要升级)。
答案 1 :(得分:1)
无论哪种方式,您可能需要将其包装在事务中。
答案 2 :(得分:1)
不切换的最大原因是你现在所拥有的工作和改变引入了新bug的可能性。如果你想在更新其他东西时改变,那没关系,但是你真的要做什么从变化中获益?我怀疑性能增益是否可能非常小,因为您提供的示例似乎使用单个记录。