1

私の質問は非常に単純ですが、それが可能かどうかはわかりません。

テーブルがあり、以下の列が含まれているとします

PokemonHappiness    smallint

その列に最大値を設定することは可能ですか?

たとえば、最大値を 10000 に設定して、次のようなクエリを送信するとします。

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

10040 ではなく 10000 になるはずです

これは可能ですか?

4

4 に答える 4

5

SQL テーブルの列に最大値を設定したい場合、できることの 1 つはCHECK、その列に特定の基準を持つ制約を追加することです。

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

ただし、これは範囲外の入力を適切に処理しません。入力が制約に違反しているCHECK場合、SQL は単純にエラーをスローします。

この種の入力を適切に処理するには、おそらくCASE他の人が示唆するように式を使用し、CHECK挿入できるものへのハード バウンドとして制約を使用する必要があります (モデレートされていない入力値の場合のみ)。

于 2012-10-12T23:18:09.637 に答える
2

10000 に設定したい場合は、10040 に設定しないでください。「自動更新」には副作用があり、エラーが発生しやすくなります (忘れるか、誰かがそれを知らないことを考慮してください)。 )。ただし、次を使用できますCASE

UPDATE dbo.MyTable 
SET PokemonHappiness = 
       ( CASE 
           WHEN (PokemonHappiness + 50) > 10000 THEN 10000
           ELSE (PokemonHappiness + 50) 
         END
       )
于 2012-10-12T23:12:32.523 に答える
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
于 2012-10-12T23:56:45.280 に答える
0

これでそれを達成できます

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

OR 2 つのクエリ

update mytable set PokemonHappiness=PokemonHappiness+50 

update mytable set PokemonHappiness=10000 where PokemonHappiness > 10000
于 2012-10-12T23:12:22.437 に答える