我有2个表约束与Sql语句
1. Sales_Items
2. Stock_Items
我想确保当任何物品插入sale_items
表那么它的qty
必须小于(Stock_Items.qty-Sales_Items.Qty
),如果此条件不成立,则插入应失败并抛出异常。
我应该怎么做?我需要使用SQL约束与表达式或Sql触发器?
我有2个表约束与Sql语句
1. Sales_Items
2. Stock_Items
我想确保当任何物品插入sale_items
表那么它的qty
必须小于(Stock_Items.qty-Sales_Items.Qty
),如果此条件不成立,则插入应失败并抛出异常。
我应该怎么做?我需要使用SQL约束与表达式或Sql触发器?
它可以使用触发器和约束来完成。 我会为特定场景选择一个约束。
这是因为,当你想要做东西积极上的插入/更新的时刻/删除,如添加或更新另一行触发器被实际使用。在你的场景中,你并不需要触发器。你的场景是约束需求的定义。使用触发器的唯一原因是如果您想要抛出自定义错误消息。
请参阅this作为约束的参考。
希望我帮了忙!
即使可以执行业务规则与触发器,可以使用CHECK约束与用户定义的函数:
ALTER TABLE sales_items
ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty))
我会在情况下,你需要更新Stock_Items使用触发器时,添加一个新行在Sales_Items中。
触发器可以实施是比与CHECK约束定义的那些 更复杂的限制。与CHECK约束不同,触发器可以在其他表中引用列。例如,触发器可以使用另一个表中的 SELECT与插入或更新的数据 进行比较,并执行其他操作,例如修改数据或显示用户定义的错误消息。