我有2张桌子
1。Sales_Items
2。Stock_Items
我想确保在sale_items
表中插入任何项目时qty
必须小于(Stock_Items.qty-Sales_Items.Qty
),如果此条件不正确则插入失败并抛出一个例外。
我该怎么做?我需要在表达式或Sql触发器上使用sql约束吗?
答案 0 :(得分:1)
可以使用触发器和约束来完成。 我会为特定情况选择约束。
这是因为当您想要在插入/更新/删除时执行某些主动时实际使用触发器,例如添加或更新另一行。在您的方案中,您实际上不需要触发器。您的方案是约束需求的定义。使用触发器的唯一原因是您要抛出自定义错误消息。
请参阅this作为约束的参考。
希望我帮忙!
答案 1 :(得分:0)
即使可以使用触发器强制执行业务规则,也可以将CHECK CONSTRAINT与用户定义的函数一起使用:
ALTER TABLE sales_items
ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty))
如果在Sales_Items中添加新行时需要更新Stock_Items,我会使用触发器。
触发器可以强制执行比这些更复杂的限制 使用CHECK约束定义。与CHECK约束不同,触发器可以 其他表中的引用列。例如,触发器可以使用a 从另一个表中选择要与插入或更新的数据进行比较 并执行其他操作,例如修改数据或显示 用户定义的错误消息。