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

标签 sql sql-server sql-server-2005 merge upsert

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

存在方法

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/

相关文章:

sql - 你将如何执行此 SQL 查询?

java.sql.SQLException : no such column: after accepting sql query

sql-server - 为什么我无法在 SSMS 中删除(编辑)具有 xml 值的行?

sql-server - 从本地时间获取美国的日期时间

sql-server - 可检索的文本在2个表中,如何设计全文索引?

mysql - mysql 如何执行或解释子查询?

sql - 具有许多 (0,n) 关系的数据库建模

SQL Server 排序时间最近,然后最接近

sql - 没有行但(XLOCK,ROWLOCK)锁定它?

xml - 将 varbinary(max) 转换为 xml 格式