我的问题很简单,但我不确定是否可能。
假设我有一个表,它包含下面的列
PokemonHappiness smallint
是否可以为该列设置最大值?
例如,如果我将最大值设置为10000并发送像这样的查询
--Assume that PokemonHappiness is equal to 9990
update mytable set PokemonHappiness = PokemonHappiness+50
它应该变成10000而不是10040
这可能吗?
答案 0 :(得分:3)
如果要在SQL表的列上设置最大值,您可以做的一件事是添加CHECK
约束,并为该列指定特定条件:
ALTER TABLE dbo.mytable ADD CONSTRAINT CK_HAPPINESS_MAX CHECK (PokemonHappiness <= 10000)
然而,这不会以优雅的方式处理越界输入;如果您的输入违反CHECK
约束,则SQL只会抛出错误。
要正确处理这种输入,你应该像其他人建议的那样使用CASE
表达式,并且可能使用CHECK
约束作为可插入内容的硬约束(仅限于未经调整的输入值)。
答案 1 :(得分:1)
如果你想把它设置为10000,那就不要把它设置为10040.你的“自动更新”会产生副作用,而且非常容易出错(考虑到你会忘记它或某人没有'我知道)。但您可以使用CASE
:
UPDATE dbo.MyTable
SET PokemonHappiness =
( CASE
WHEN (PokemonHappiness + 50) > 10000 THEN 10000
ELSE (PokemonHappiness + 50)
END
)
答案 2 :(得分:1)
触发器。我测试了这个。
CREATE TRIGGER dbo.Table_2update
ON dbo.Table_2
FOR INSERT, UPDATE
AS BEGIN
UPDATE dbo.Table_2 SET dbo.Table_2.memberID = 10000
FROM INSERTED
WHERE inserted.id = Table_2.id
AND dbo.Table_2.memberID > 10000
END
答案 3 :(得分:0)
你可以用这个来实现这个目标
update mytable set PokemonHappiness=(CASE WHEN (PokemonHappiness+50) > 10000
THEN 10000 ELSE PokemonHappiness+50 END)
或两个查询
update mytable set PokemonHappiness=PokemonHappiness+50
update mytable set PokemonHappiness=10000 where PokemonHappiness > 10000