【问题标题】:Check referential integrity in stored procedure检查存储过程中的引用完整性
【发布时间】:2011-12-24 00:21:40
【问题描述】:

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

我不希望订单在 order 表中,而 customerIDcustomer 表中不存在,因此我在 customerID 上设置了外键约束。

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    你有两个选择:

    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
    

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 1970-01-01
        相关资源
        最近更新 更多