sql - SQL 更新与检查约束错误冲突
问题描述
我正在尝试更新存储过程中的一些数值
SET SubTotal = SubTotal + @ExtCost
, GST = SubTotal * 0.05
, Total = SubTotal + GST
WHERE JobNumber = @JobNumber
@ExtCost
并且@JobNumber
都是有效的并且工作正常。
我收到此错误:
UPDATE 语句与 CHECK 约束“ck_SubTotalandTotal”冲突
检查约束是Total > SubTotal
逻辑对我来说似乎很好,但我不知道为什么它不起作用:(
解决方案
以具有以下值的记录为例:
- 小计:10
- 消费税:0.5
- 总计:10.5
现在您使用 2 的 @extCost 执行更新
SET
SubTotal = SubTotal + @ExtCost,
GST = SubTotal * 0.05,
Total = SubTotal + GST
WHERE JobNumber = @JobNumber
在更新过程中,当前值被用来填充列值,所以这与
SET
SubTotal = 10 + 2,
GST = 10 * 0.05,
Total = 10 + 0.05
WHERE JobNumber = @JobNumber
因此(小计)12 >(总计)10.05 导致约束问题。
您想要的是考虑计算值,因此您需要对每个字段进行计算。
SET
SubTotal = SubTotal + @ExtCost,
GST = (SubTotal + @ExtCost) * 0.05,
Total = (SubTotal + @ExtCost) + ((SubTotal + @ExtCost) * 0.05)
WHERE JobNumber = @JobNumber
或更短
SET
SubTotal = SubTotal + @ExtCost,
GST = (SubTotal + @ExtCost) * 0.05,
Total = (SubTotal + @ExtCost) * 1.05
WHERE JobNumber = @JobNumber
推荐阅读
- java - 如何解决使用 for 循环打印表格的 Java 问题?
- html - 窗口浏览器上的身体高度和最小高度扩展
- c++ - 无法实例化抽象类,也无法将参数 1 从“const size_t”转换为“const BDictionary”
&' 错误 - python - 存储最大交易金额并在回溯期内保留第二高交易金额
- flutter - 带有页面视图的 BottomNavigationBar 不会动画到索引页面
- apache-spark - Spark:reduceByKey() 的缓慢实现
- reactjs - 组件正在从另一个组件接收道具,并连接到商店以调用操作
- firebase - Firestore 数组联合:INVALID_ARGUMENT:无法将数组值转换为数组值
- python - Python - 多行命令的语法无效
- java - 清理类路径,将来避免此问题的正确方法是什么?