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



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

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

PokemonHappiness    smallint

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

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

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

它应该变成 10000 而不是 10040

这可能吗?

如果要在 SQL 表的列上设置最大值,可以做的一件事是添加一个具有该列特定条件的CHECK约束:

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

但是,这不会以优雅的方式处理越界输入;如果您的输入违反了CHECK约束,SQL 将简单地抛出错误。

要正确处理此类输入,您可能应该按照其他人的建议使用 CASE 表达式,并且可能使用 CHECK 约束作为可以插入的内容的硬绑定(以防输入值未经审核)。

如果要将其设置为 10000,请不要将其设置为 10040。您的"自动更新"会产生副作用,并且非常容易出错(考虑到您会忘记它或有人不知道它)。但是您可以使用CASE

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

触发器。 我测试了这个。

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

你可以用这个来实现这一点

update mytable set PokemonHappiness=(CASE WHEN (PokemonHappiness+50) > 10000 
                                      THEN 10000 ELSE PokemonHappiness+50 END)

OR与两个查询

update mytable set PokemonHappiness=PokemonHappiness+50 
update mytable set PokemonHappiness=10000 where PokemonHappiness > 10000

最新更新