SQL Server 如果存在

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 已存在于表中的失败情况。

【讨论】:

以上是关于SQL Server 如果存在的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server CE:如果存在更新,否则插入

SQL Server 如果存在

SQL Server 代理作业步骤 - 如果存在不评估

如果列表sql server中不存在数据,则返回值

如果 SQL Server 中存在外键约束,如何删除表?

如果存在可在 SQL Server 2005 和 SQL Server Compact 3.5 中使用的索引,则删除该索引的脚本