使用Sql语句约束

时间:2013-11-26 05:41:14

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

我有2张桌子

1。Sales_Items

2。Stock_Items

我想确保在sale_items表中插入任何项目时qty必须小于(Stock_Items.qty-Sales_Items.Qty),如果此条件不正确则插入失败并抛出一个例外。

我该怎么做?我需要在表达式或Sql触发器上使用sql约束吗?

2 个答案:

答案 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   从另一个表中选择要与插入或更新的数据进行比较   并执行其他操作,例如修改数据或显示   用户定义的错误消息。

See source