是否有可能在SQL Server 2008 R2的列设置为最大值(Is it possible to

2019-11-01 03:44发布

我的问题很简单,但我不知道这是否是可能的。

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

PokemonHappiness    smallint

是否有可能设置该列的最大值?

举例来说,如果我的最大设置为10000和发送这样的查询

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

它应该成为10000,而不是10040

这可能吗?

Answer 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


Answer 2:

如果你想设置一个SQL表中的列的最大值,有一两件事你可以做的就是添加一个CHECK约束与该列具体标准为:

ALTER TABLE dbo.mytable ADD CONSTRAINT CK_HAPPINESS_MAX CHECK (PokemonHappiness <= 10000)

然而,这不会处理出界外以优美时尚的输入; 如果你的输入违反了CHECK约束,SQL会简单地抛出一个错误。

要妥善处理这种输入的,你应该使用一个CASE表达式为别人建议,也许使用CHECK约束作为硬约束,以能插入内容(只需在未经协调的输入值的情况下)。



Answer 3:

当你想将它设置为10000,那么请不要将其设置为10040你的“自动更新”将有副作用,他很容易出错(认为你会忘记它还是有人不知道它)。 但是你可以使用一个CASE

UPDATE dbo.MyTable 
SET PokemonHappiness = 
       ( CASE 
           WHEN (PokemonHappiness + 50) > 10000 THEN 10000
           ELSE (PokemonHappiness + 50) 
         END
       )


Answer 4:

可以实现与此

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


文章来源: Is it possible to set a maximum value for a column in SQL Server 2008 r2