一尘不染

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

sql

我主要使用 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%也相当可观。这是我要切换的主要原因。

笔记

为了易于阅读,特意简化了示例。它们绝不反映我的实际情况。


阅读 164

收藏
2021-05-23

共1个答案

一尘不染

我没看到任何特别的问题。但是,您将不得不尝试哪一个性能更好(尽管我认为在此示例中这无关紧要)。但是正如Cade所指出的,请使用事务。

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

2021-05-23