检查行是否存在

rob*_*sta 2 sql-server-2008 sql-server insert if-not-exists

我需要编写一个只插入一行的查询,即使该查询运行多次。作为 SQL 的新手(以及新的),我做了一个,if not exists(...)但一个朋友说他更喜欢删除该行,如果它存在,然后再次添加它。

  • 删除EXISTS或反之亦然可能有什么好处?
  • 还有另一种方法吗?

JNK*_*JNK 6

正如评论中提到的......

  • 没有理由使用DELETE/INSERT而不是仅仅UPDATE检查或检查EXISTS,但有一些理由不这样做
    • 删除记录并添加新记录的 IO 多于行内更新
    • 根据聚集索引,您可能会增加碎片
    • 日志文件增长
    • 增加对有问题的行的锁定 -EXISTS尽可能地非侵入性,DELETE是相反的

我相信还有很多其他人。检查存在性在各方面都优于删除现有记录。删除现有记录的行为需要检查是否存在,那么为什么在那之后你还要做任何额外的事情呢?