我主要使用 Exists方法 将行合并到表中,但我正在考虑切换到“ 行计数”方法 。有什么理由不这样做吗?
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万行的表上,它的时钟是 Exists方法的 1/5 。测试不是太科学,但即使保守地+/- 15%也相当可观。这是我要切换的主要原因。
笔记
为了易于阅读,特意简化了示例。它们绝不反映我的实际情况。
我没看到任何特别的问题。但是,您将不得不尝试哪一个性能更好(尽管我认为在此示例中这无关紧要)。但是正如Cade所指出的,请使用事务。
另外,请注意,对于SQL Server 2008,您可以使用MERGE语句(以防万一您要升级)。