【问题标题】:sql server, composite keys - ignoring duplicatesql server,复合键 - 忽略重复
【发布时间】:2013-05-02 16:57:21
【问题描述】:

当我尝试保存已经存在的记录时,有没有办法防止 sql 抛出错误。我有一个多对多关系的复合键表,它只有两个值,当我从我的应用程序更新模型时,它会尝试保存所有记录,已经存在的记录会引发错误Cannot insert duplicate key有没有办法让数据库忽略这些,还是我必须在应用程序中处理它?

【问题讨论】:

    标签: sql sql-server composite-key


    【解决方案1】:

    您正在调用INSERT 并尝试添加重复的键。此错误是设计使然,并且必不可少。数据库正在为异常和错误的情况抛出异常。

    如果您尝试执行“upsert”,则可能需要使用存储过程或使用MERGE 语法。

    如果您不想 UPDATE 而只是忽略表中已经存在的行,那么您只需在 INSERT 语句中添加一个例外...例如

    ....
    WHERE 
        table.Key <> interting.key
    

    【讨论】:

      【解决方案2】:

      用你的插入语句试试这样的东西。

      insert into foo (x,y)
      select @x,@y
      except
      select x,y from foo
      

      这将向 foo 添加一条记录,前提是它尚未在表中。

      【讨论】:

        【解决方案3】:

        您可以尝试使用IGNORE_DUP_KEY 选项创建索引,这样只有在您有重复键时才会收到警告,而不是真正的错误。

        另一种可能更好的选择是使用MERGE 语句而不是插入。 MERGE 语句让您在一个语句中完成插入、更新和删除操作,听起来它应该很适合您尝试做的事情。

        最后但同样重要的是,正如您所说,在您的应用中修复它,只插入需要添加的行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-19
          • 2018-01-11
          • 2011-01-22
          • 2015-10-15
          • 1970-01-01
          • 2018-04-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多