SQL:如果记录不存在,则插入记录的最佳实践

时间:2012-10-07 12:50:37

标签: asp.net sql-server

我有一个asp.net Gridview,可以将插入操作处理到SQL数据库中。仅当记录满足唯一性标准时才允许插入记录,并且使用SQL Server中的唯一索引强制执行此约束。如果用户尝试插入已存在的记录,则会显示错误消息。

我想知道实现这一目标的最佳做法是什么。

  1. 检查记录是否存在SQL端,使用IF EXISTS和锁定提示(updlock,holdlock等)。根据是否插入记录,将错误代码返回给ASP.net
  2. 在SQL Server try / catch块内执行INSERT操作,依赖唯一索引来防止在记录存在时发生插入。根据是否抛出异常返回错误代码。
  3. 执行INSERT操作SQL端,但没有SQL try / catch。在ASP.net中处理PK违规异常。
  4. 通常我会考虑使用异常来处理有效操作是不好的做法 - 即除非出现问题,否则软件不应抛出异常。但是,如果SQL中表的唯一索引要实现所需的约束,为什么还要执行手动检查是否存在记录?

1 个答案:

答案 0 :(得分:0)

我会单独调用以检查记录是否已存在。如果是,则向用户显示消息,如果没有插入则。我这样做的原因是因为我更喜欢在应用程序中保留所有业务逻辑。

如果您坚持只进行一次存储过程调用:

我会在插入之前检查。我还将向存储过程添加一个输出参数,如果插入不成功则返回一条消息。在我的应用程序中,如果我在输出参数中看到一条消息,我会将其显示给用户。