是否可以在SQL Server 2008 r2中为列设置最大值

时间:2012-10-12 22:58:26

标签: tsql sql-server-2008-r2 set max

我的问题很简单,但我不确定是否可能。

假设我有一个表,它包含下面的列

PokemonHappiness    smallint

是否可以为该列设置最大值?

例如,如果我将最大值设置为10000并发送像这​​样的查询

--Assume that PokemonHappiness is equal to 9990
update mytable set PokemonHappiness = PokemonHappiness+50   

它应该变成10000而不是10040

这可能吗?

4 个答案:

答案 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