我的问题很简单,但我不知道这是否是可能的。
假设我有一个表,它包含以下列
PokemonHappiness smallint
是否有可能设置该列的最大值?
举例来说,如果我的最大设置为10000和发送这样的查询
--Assume that PokemonHappiness is equal to 9990
update mytable set PokemonHappiness = PokemonHappiness+50
它应该成为10000,而不是10040
这可能吗?
触发。 我测试了这一点。
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
如果你想设置一个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
)
可以实现与此
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