9

これはおそらく簡単な答えですが、見つかりません。整数の列を持つテーブルがあり、行が挿入されたときに、この列の値がゼロより大きいことを確認したいと考えています。コード側でこれを行うこともできましたが、テーブルで強制するのが最善だと考えました。

ありがとう!

前回のコメントに誤りがありましたが、今はすべて問題ありません。

4

5 に答える 5

18

列にチェック制約を使用できます。IIRC の構文は次のようになります。

create table foo (
    [...]
   ,Foobar int not null check (Foobar > 0)
    [...]
)

以下のポスターが言うように (Constantin に感謝します)、テーブル定義の外にチェック制約を作成し、意味のある名前を付けて、適用される列が明確になるようにする必要があります。

alter table foo
  add constraint Foobar_NonNegative
      check (Foobar > 0)

のシステム データ ディクショナリからチェック制約のテキストを取得できますsys.check_constraints

select name
      ,description
  from sys.check_constraints
 where name = 'Foobar_NonNegative'
于 2008-10-15T15:11:15.957 に答える
6

データベース制約を作成します。

ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0)

複数の列を含む、かなり洗練された制約を設定することもできます。例えば:

ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
于 2008-10-15T15:11:06.880 に答える
0

CHECKテーブルの作成時に制約を追加する

CREATE TABLE Test(
      [ID] [int]  NOT NULL,
      [MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
于 2008-10-15T15:12:54.067 に答える
0

テーブルフィールドに CONSTRAINT を追加したいと思います:

ALTER TABLE tableName WITH NOCHECK
ADD CONSTRAINT constraintName CHECK (columnName > 0)

そのオプションの NOCHECK は、制約が既存のデータ行 (無効なデータを含む可能性がある) に適用されないようにするために使用され、制約を追加できるようにします。

于 2008-10-15T15:13:07.653 に答える