我想知道每个人对于在INSERTS和UPDATES之前预先检查外键查找而不是让数据库处理它的意见是什么。如您所知,如果相应的行不存在,服务器将抛出异常。
在.NET中,我们总是试图避免异常编码,即不使用引发的异常来驱动代码流。这意味着我们尝试在运行时之前检测潜在的错误。
使用SQL我看到两个相反的点
1)无论你是否检查数据库。这意味着您可能会浪费(多少是主观的)CPU周期进行两次相同的检查。这使得人们倾向于让数据库只做它。
2)预检查允许开发人员将更多信息性异常提交回调用应用程序。可以为每个需要完成的检查返回不同的错误代码,而不是接收通用的“外键冲突”。
你有什么想法?
答案 0 :(得分:2)
数据完整性维护是数据库的工作,所以我想让你让数据库处理它。在这种情况下引发的异常是一个有效的情况,即使可以避免,它也是一个正确引发的异常,因为它意味着代码中的某些东西不能正常工作,它正在发送一个孤立的记录用于插入(或者某些东西)第一次插入失败 - 无论你插入它的方式如何)。此外,你应该尝试/捕获,所以你可以实现一个有意义的方法来处理这个......
答案 1 :(得分:2)
之前不要测试:
你可以做的是将INSERT包装在拥有 TRY / CATCH中并忽略错误xxxx(外键违规,抱歉不知道)。我之前提到过(对于唯一键,错误2627)
这非常适合高容量。
答案 2 :(得分:1)
我没有看到预先检查FK违规的好处。
如果您需要更多信息性错误语句,可以简单地将插入包装在try-catch块中,并在此时返回自定义错误消息。这样,你只会在失败时而不是每次都运行额外的查询。