【问题标题】:Constraint with Sql statement用 Sql 语句约束
【发布时间】:2013-11-26 05:41:13
【问题描述】:

我有两张桌子

1.Sales_Items

2.Stock_Items

我想确保在sale_items 表中插入任何项目时,qty 必须小于 (Stock_Items.qty-Sales_Items.Qty),如果此条件不成立,则插入应该失败并引发异常。

我应该怎么做?我需要使用带有表达式或 Sql 触发器的 sql 约束吗?

【问题讨论】:

    标签: .net sql sql-server linq-to-sql


    【解决方案1】:

    可以同时使用触发器和约束来完成。 我会为特定场景选择一个约束。

    这是因为当您想要在插入/更新/删除时主动主动执行某些操作(例如添加或更新另一行)时,实际上会使用触发器。在您的场景中,您实际上并不需要触发器。您的场景是约束需求的定义。使用触发器的唯一原因是如果您想抛出自定义错误消息。

    请参阅this 作为约束参考。

    希望我能帮上忙!

    【讨论】:

      【解决方案2】:

      即使可以使用触发器强制执行业务规则,您也可以将 CHECK CONSTRAINT 与用户定义的函数一起使用:

      ALTER TABLE sales_items
      ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty))
      

      如果您需要在 Sales_Items 中添加新行时更新 Stock_Items,我会使用触发器。

      触发器可以强制执行比那些更复杂的限制 用 CHECK 约束定义。与 CHECK 约束不同,触发器可以 引用其他表中的列。例如,触发器可以使用 从另一个表中选择以与插入或更新的数据进行比较 并执行其他操作,例如修改数据或显示 用户定义的错误消息。

      See source

      【讨论】:

        猜你喜欢
        • 2017-01-11
        • 2012-11-27
        • 1970-01-01
        • 2019-07-24
        • 2020-02-12
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多