【问题标题】:SQL Server IF EXISTSSQL Server 如果存在
【发布时间】:2010-10-22 05:06:27
【问题描述】:

我必须将数据插入到表中,但前提是它不存在。

我使用以下方法检查现有行:

IF EXISTS (SELECT 'X' FROM Table1 where id = @id)

使用'X' 代替使用列名会提高性能吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    没有。您可以使用*、列名、NULL 甚至1/0

    根据 ANSI 标准,不应对其进行评估。 Page 191 ANSI SQL 1992 Standard

    *MSDN 中被提及

    但是,更好的方法是使用 MERGE (SQL Server 2008) 或简单地捕获错误。我以前的 SO 回答:One, Two

    【讨论】:

    • @anishmarokey:查看我的其他答案的链接。唯一键本身没有帮助,但它确实允许 try/catch。它还暗示了一个有助于提高性能的索引
    【解决方案2】:

    这可能是微不足道的差异。我认为我见过的最常见的“模式”是在检查是否存在时只选择 1,但我不会太担心。

    select 1 from Table1...
    

    【讨论】:

      【解决方案3】:

      一种技术是在列上添加唯一约束。始终插入一条记录并处理该 id 已存在于表中的失败情况。

      【讨论】:

        猜你喜欢
        • 2011-11-17
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        相关资源
        最近更新 更多