Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Sql语句的约束_.net_Sql_Sql Server_Linq To Sql - Fatal编程技术网

.net Sql语句的约束

.net Sql语句的约束,.net,sql,sql-server,linq-to-sql,.net,Sql,Sql Server,Linq To Sql,我有两张桌子 1.销售项目 2.库存项目 我想确保在sale\u items表中插入任何项目时,其qty必须小于(Stock\u items.qty-Sales\u items.qty),如果此条件不成立,则插入应失败并引发异常 我应该怎么做?我需要将sql约束与表达式或sql触发器一起使用吗?可以同时使用触发器和约束我会为特定场景选择一个约束。 这是因为触发器实际上是在插入/更新/删除时,如添加或更新另一行时,当您想主动执行某件事时使用的。在您的场景中,实际上不需要触发器。您的场景是约束需求的

我有两张桌子

1.
销售项目

2.
库存项目

我想确保在
sale\u items
表中插入任何项目时,其
qty
必须小于(
Stock\u items.qty-Sales\u items.qty
),如果此条件不成立,则插入应失败并引发异常


我应该怎么做?我需要将sql约束与表达式或sql触发器一起使用吗?

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

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

请参见作为约束的参考


希望我能帮忙

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

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

请参见作为约束的参考


希望我能帮忙

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

ALTER TABLE sales_items
ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty))
ALTER TABLE sales\u项目
添加约束检查(数量
如果在Sales\u Items中添加新行时需要更新Stock\u Items,我会使用触发器

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


即使可以使用触发器强制执行业务规则,也可以将检查约束与用户定义的功能一起使用:

ALTER TABLE sales_items
ADD CONSTRAINT CHECK (qty < dbo.udfCheckAvailableStock(YourProductIdColumn, qty))
ALTER TABLE sales\u项目
添加约束检查(数量
如果在Sales\u Items中添加新行时需要更新Stock\u Items,我会使用触发器

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