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

Mon*_*RPG 1 t-sql max set sql-server-2008-r2

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

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

PokemonHappiness    smallint
Run Code Online (Sandbox Code Playgroud)

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

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

--Assume that PokemonHappiness is equal to 9990
update mytable set PokemonHappiness = PokemonHappiness+50   
Run Code Online (Sandbox Code Playgroud)

它应该变成 10000 而不是 10040

这可能吗?

小智 5

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

ALTER TABLE dbo.mytable ADD CONSTRAINT CK_HAPPINESS_MAX CHECK (PokemonHappiness <= 10000)
Run Code Online (Sandbox Code Playgroud)

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

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