限制SQL中的值

限制SQL中的值,sql,Sql,不太熟悉SQL 我有以下SQL: UPDATE my_Table SET num = num + 1 WHERE id = 1 我希望将num列限制为不超过阈值,假设为100。如果num将达到100,我希望它保持在100并且不会增加 我想这里是否应该包括这个语句。但是我不知道怎么做。您可以使用大小写表达式: UPDATE my_Table SET num = CASE WHEN num+1 >= 100 THEN 100 ELSE num+1 END WHERE id=1 您可以

不太熟悉SQL

我有以下SQL:

UPDATE my_Table 
SET num = num + 1 
WHERE id = 1
我希望将
num
列限制为不超过阈值,假设为100。如果
num
将达到100,我希望它保持在100并且不会增加


我想这里是否应该包括这个语句。但是我不知道怎么做。

您可以使用
大小写
表达式:

UPDATE my_Table 
SET num = CASE WHEN num+1 >= 100 THEN 100 ELSE num+1 END
WHERE id=1

您可以使用
大小写
表达式:

UPDATE my_Table 
SET num = CASE WHEN num+1 >= 100 THEN 100 ELSE num+1 END
WHERE id=1
尝试:

更新我的_表集合num=num+1,其中id=1和num尝试:


更新my_Table SET num=num+1,其中id=1和num在这种情况下,您可以将IIF用于较短的版本

    UPDATE my_Table SET num=(IIF((num+1)>100,num,num+1)) WHERE id=1

在这种情况下,您可以使用IIF进行更短的版本

    UPDATE my_Table SET num=(IIF((num+1)>100,num,num+1)) WHERE id=1

我从更新声明中看到了可以解决您问题的答案,无论采用何种方式都很好

直到有人创造了一个不符合你的约束的陈述,比如一个新同事,一个忘记了它的困倦的人或者其他原因。您可能应该知道强制执行此规则的其他选项

您可以创建一个检查
num
是否从未设置为大于100的。这样,任何使该值大于100的update或insert语句都将导致错误,而不是执行insert或update


强制执行此规则的另一种方法是创建一个更新并插入触发器,检查
num
是否大于100,并在这种情况下将其重置为100,这不是真正的初学者级别。在运行insert或update语句时,这不会导致错误。我没有ANSI-SQL触发器的好链接,但每个RDBMS都有很好的文档。

我从更新语句中看到了可以解决您问题的答案,无论采用何种方式都很好

直到有人创造了一个不符合你的约束的陈述,比如一个新同事,一个忘记了它的困倦的人或者其他原因。您可能应该知道强制执行此规则的其他选项

您可以创建一个检查
num
是否从未设置为大于100的。这样,任何使该值大于100的update或insert语句都将导致错误,而不是执行insert或update



强制执行此规则的另一种方法是创建一个更新并插入触发器,检查
num
是否大于100,并在这种情况下将其重置为100,这不是真正的初学者级别。在运行insert或update语句时,这不会导致错误。我没有ANSI-SQL触发器的好链接,但是每个RDBMS都有很好的文档。

但是如果
num
的值已经超过100,它将保留该值,而不是将其限制为100100@Lamak,OP在如何工作以及当前值是什么方面相当模糊。我希望只在必要时更新一行。但是如果
num
的值已经超过100,它将保留该值,而不是将其限制为100100@Lamak,OP在如何工作以及当前值是什么方面相当模糊。我宁愿只在必要时更新一行。考虑到其他选项,最好的方法是什么?当该行最终达到100时,为什么每次都要麻烦将其更新为相同的100值。@Lamak,OP从不说起始值可能是什么,也不可能是什么。@KM。是的,那么?。正如你所说,op从未阐明起始值可能是什么,也可能不是。我选择了一个在我的评论中写有假设的解决方案。这就像添加一个
和num 99
@Lamak一样简单,您的代码在哪里假设第一个值应该是1?如果初始值为负,如果初始值为空,该怎么办?考虑到其他选项,最好的方法是什么?当行最终达到100时,为什么每次都要麻烦将其更新为相同的100值。@Lamak,OP从不说起始值可能是什么,也不可能是什么。@KM。是的,那么?。正如你所说,op从未阐明起始值可能是什么,也可能不是。我选择了一个在我的评论中写有假设的解决方案。这就像添加一个
和num 99
@Lamak一样简单,您的代码在哪里假设第一个值应该是1?如果初始值为负,如果初始值为空,该怎么办?谢谢,我是在解决更新时没有错误的问题。因为我可能会在同一个SQL语句中更新其他内容。我将添加另一种方法“我忘记了”——证明。只是为了完整起见,可能不是初学者水平。谢谢,我是明确地在更新时没有错误的解决方案。因为我可能会在同一个SQL语句中更新其他内容。我将添加另一种方法“我忘记了”——证明。只是为了完整起见,可能不是初学者水平。