1

我在 sql server 2000 数据库中有一个customer表和一个order表。

我不希望表中的订单在ordercustomerID中不存在,customer所以我在customerID.

这一切都很好,但是在编写可能违反约束的存储过程时,有没有办法检查是否会违反约束,如果会,跳过/回滚查询?

此刻所发生的只是存储过程返回一个错误,该错误显示在我的 asp 页面上,看起来相当丑陋 + 大多数用户不会理解它。

如果可能的话,我想要一种更优雅的方式来处理错误。

谢谢

4

2 回答 2

0

您可以在尝试操作之前检查数据,或者您可以尝试操作,然后在每个语句之后检查错误,然后 ROLLBACK 等。

但是您可以完全在存储过程中处理它,并根据您的设计适当地返回给调用者。

看看这篇文章: http: //www.sommarskog.se/error-handling-II.html

在 SQL Server 2005 中,可以使用TRY/CATCH

于 2011-11-07T22:43:54.937 回答
0

你有两个选择:

  1. 添加错误处理以捕获丑陋,错误检查它以查看它是否违反 FK 约束并将其显示给用户。这是恕我直言,更好的解决方案。

  2. 在存储过程中添加代码,如下所示:

if exists (select null from customer where customerid=@customerId )  
begin  
  --The customer existed so insert order  
end  
else  
begin  
  --Do something to tell you code to display error message  
end

使用第二个选项,您将希望观察您的事务一致性。例如,如果在您进行检查后删除客户会发生什么。

于 2011-11-07T22:38:51.473 回答