CHECK 制約の作成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

テーブル内に CHECK 制約を作成すると、SQL Server Management Studio または Transact-SQL を使用して、1 列以上に許容可能なデータ値を指定することができます。 列の制約を追加する方法の詳細については、ALTER TABLE column_constraint に関する記事を参照してください。

詳細については、「UNIQUE 制約と CHECK 制約」を参照してください。

解説

既存の CHECK 制約に対してクエリを実行するには、sys.check_constraints システム カタログ ビューを使います。

アクセス許可

テーブルに対する ALTER 権限が必要です。

SQL Server Management Studio を使用する

  1. オブジェクト エクスプローラーで、CHECK 制約を追加するテーブルを展開し、[制約] を右クリックして、[新しい制約] を選択します。

  2. [CHECK 制約] ダイアログ ボックスで、[式] フィールドを選択して、省略記号 [...] を選択します。

  3. [CHECK 制約式] ダイアログ ボックスで、CHECK 制約の SQL 式を入力します。 たとえば、Product テーブルの SellEndDate 列への入力を SellStartDate 列の日付と同じか、それよりも後の日付の値または NULL 値に限定するには、次のように入力します。

    SellEndDate >= SellStartDate
    

    また、zip 列への入力を 5 桁の数値に限定するには、次のように入力します。

    zip LIKE '[0-9][0-9][0-9][0-9][0-9]'
    

    Note

    数値以外の制約値は、必ず単一引用符 (') で囲んでください。

  4. [OK] を選択します。

  5. [ID] カテゴリでは、CHECK 制約の名前を変更し、制約の説明 (拡張プロパティ) を追加できます。

  6. テーブル デザイナー のカテゴリでは、制約が適用されるタイミングを設定できます。

    アクション 次のオプションから Yes を選択してください
    制約を作成する前に既に存在していたデータで制約をテストする [作成または有効化するときに既存データを確認]
    このテーブルでレプリケーション操作が発生するたびに制約を適用する [レプリケーションに対して適用]
    このテーブルの行を挿入または更新するたびに制約を適用する [INSERT および UPDATE に適用]
  7. [閉じる] を選択します。

Transact-SQL の使用

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. 標準バーで、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。

    まず、制約を作成します。

    ALTER TABLE dbo.DocExc
    ADD ColumnD INT NULL CONSTRAINT CHK_ColumnD_DocExc CHECK (
        ColumnD > 10
        AND ColumnD < 50
    );
    GO
    

    その制約をテストするには、最初に CHECK 制約に合格する値を追加します。

    INSERT INTO dbo.DocExc (ColumnD) VALUES (49);
    

    次に、CHECK 制約に失敗する値を追加してみます。

    INSERT INTO dbo.DocExc (ColumnD) VALUES (55);