检查存储过程中的参照完整性

时间:2011-11-07 22:22:41

标签: tsql stored-procedures sql-server-2000 referential-integrity

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

我不希望命令位于order表中,customerID表中不存在customer,因此我在{{}}上放置了外键约束{1}}。

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

在发生这一切的那一刻,存储过程会返回一个错误,该错误显示在我的asp页面上,看起来相当难看+大多数用户都不会理解它。

如果可能的话,我希望以更优雅的方式处理错误。

由于

2 个答案:

答案 0 :(得分:0)

您有两种选择:

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

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

  3. 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