2013-11-26 61 views
1

我有2个表约束与Sql语句

1. Sales_Items

2. Stock_Items

我想确保当任何物品插入sale_items表那么它的qty必须小于(Stock_Items.qty-Sales_Items.Qty),如果此条件不成立,则插入应失败并抛出异常。

我应该怎么做?我需要使用SQL约束与表达式或Sql触发器?

回答

1

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

这是因为,当你想要做东西积极的插入/更新的时刻/删除,如添加或更新另一行触发器被实际使用。在你的场景中,你并不需要触发器。你的场景是约束需求的定义。使用触发器的唯一原因是如果您想要抛出自定义错误消息。

请参阅this作为约束的参考。

希望我帮了忙!

0

即使可以执行业务规则与触发器,可以使用CHECK约束与用户定义的函数:

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

我会在情况下,你需要更新Stock_Items使用触发器时,添加一个新行在Sales_Items中。

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

See source