我在sql server 2000数据库中有一个customer
表和一个order
表。
我不希望命令位于order
表中,customerID
表中不存在customer
,因此我在{{}}上放置了外键约束{1}}。
这一切都正常但是在编写可能违反约束的存储过程时,是否有办法检查是否会违反约束,如果是,则跳过/回滚查询?
在发生这一切的那一刻,存储过程会返回一个错误,该错误显示在我的asp页面上,看起来相当难看+大多数用户都不会理解它。
如果可能的话,我希望以更优雅的方式处理错误。
由于
答案 0 :(得分:0)
您有两种选择:
添加错误处理以捕获丑陋,错误检查它以查看它是否是FK约束违规并将其显示给用户。这是恕我直言,更好的解决方案。
在存储过程中添加代码,如下所示:
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
使用第二个选项,您将需要观察事务的一致性。例如,如果在您进行检查后删除了客户,会发生什么。
答案 1 :(得分:0)
您可以在尝试操作之前检查数据,或者您可以尝试操作,然后在每个语句之后检查错误,然后检查ROLLBACK等。
但您可以在存储过程中完全处理它,并根据您的设计适当地返回给调用者。
看一下这篇文章:http://www.sommarskog.se/error-handling-II.html
在SQL Server 2005中,可以使用TRY/CATCH