sql-server - 在插入存储过程之前检查是否存在

标签 sql-server sql-server-2005 t-sql stored-procedures

在我的存储过程中,我想检查以确保表中尚不存在我尝试插入的内容。我已经尝试了下面的代码,但它似乎给了我误报(又名即使它不在表中也显示为真)。有更好的办法吗?

if not exists (select myID from tableName where myID = @myID and otherColumn = @otherColumn)
begin
    insert into tableName
        (
            myID
            , otherColumn
        ) values (
            @myID
            , @otherColumn
        )
end

最佳答案

两个想法。

首先,如果涉及 NULL,您的“存在位置”逻辑可能无法按您希望的方式工作。

其次,我会尝试将其作为一个语句(因为关系数据库的 ACID 属性),而不是搞乱事务、锁以及它们的好 friend 阻塞和死锁。以下语句有效:

INSERT tableName (myId, otherColumn)
 select @myId, @otherColumn
 except select myId, otherColumn
  from tableName

这可能不适合您,具体取决于表大小和/或索引问题;根据您的情况,其他变体也是可能的。

关于sql-server - 在插入存储过程之前检查是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266494/

相关文章:

c# - 查询重复日期

sql-server - 在 SQL Server 中对大量数据执行操作的最佳方法是什么?

delphi - 如何检测SQ​​L Server数据库中发生的任何修改?

sql-server - 需要将 SQL Server xml blob 转换为表进行操作

SQL 连接及其在查询中列出的顺序

sql-server - 通过 T-SQL 调用 SMO?

SQL - 根据约束只接受大写字母

sql server 分组结果

sql-server - UNION 与 SELECT DISTINCT 和 UNION ALL 性能对比

sql - 在 SQL Server 中创建层次结构