SQL Server 2005的首选合并方法是什么?

SQL Server 2005的首选合并方法是什么?,sql,sql-server,sql-server-2005,merge,upsert,Sql,Sql Server,Sql Server 2005,Merge,Upsert,我主要使用Exists方法将行合并到表中,但我正在考虑切换到行计数方法。有什么理由不这样做吗 存在方法 行计数法 演出 行计数方法似乎要快得多。在一个大约有50k行的表上,它以存在方法的1/5时间计时。这些测试不太科学,但即使是保守的+/-15%,也相当可观。这是我想换工作的主要原因 注意 为了便于阅读,这些例子特意简化了。它们根本不能反映我的实际情况。无论哪种方式,您可能需要将其包装在事务中。我看不出有任何特殊问题。不过,您必须尝试哪一个性能更好(尽管我认为在本例中这无关紧要)。但正如C

我主要使用Exists方法将行合并到表中,但我正在考虑切换到行计数方法。有什么理由不这样做吗

存在方法

行计数法

演出 行计数方法似乎要快得多。在一个大约有50k行的表上,它以存在方法的1/5时间计时。这些测试不太科学,但即使是保守的+/-15%,也相当可观。这是我想换工作的主要原因


注意


为了便于阅读,这些例子特意简化了。它们根本不能反映我的实际情况。

无论哪种方式,您可能需要将其包装在事务中。

我看不出有任何特殊问题。不过,您必须尝试哪一个性能更好(尽管我认为在本例中这无关紧要)。但正如Cade指出的,使用事务


另外,请注意,对于SQL Server 2008,您可以使用MERGE语句(以防万一您要升级)。

不切换的最大原因是,您现在所做的工作正在进行,并且进行更改可能会引入新的bug。如果您想在更新其他内容时进行更改,那没关系,但是您真正从更改中获得了什么?我怀疑性能增益(如果有的话)可能非常小,因为您给出的示例似乎使用了单个记录

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