次の方法で共有


列の既定値の指定

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server Management Studio (SSMS) を使用して、テーブル列に入力される既定値を指定できます。 オブジェクト エクスプローラーを使用するか、Transact-SQL を実行してデフォルトを設定できます。

列にデフォルト値を割り当てず、ユーザーが列を空白のままにした場合、次のようになります。

  • NULL 値を許可するオプションを設定すると、列に NULL が挿入されます。

  • null 値を許可するオプションを設定しない場合、列は空白のままですが、ユーザーまたはアプリケーションは列の値を指定するまで行を挿入できません。

データベース レベルのデータ整合性を確保するために、さまざまなタスクに既定の制約を使用できます。

  • "アクティブ" 列または "有効" 列の行値を、挿入時に 1 するように設定します。
  • 日付フィールドの行値を現在の日付に設定します。
  • フィールドの行値を決定論的システム関数に設定します (例: DB_NAME())。

制限事項

始める前に、次の制限事項と制約事項に注意してください。

  • バインドされた既定値 (かっこなしで表示されている値) を [既定値] フィールドに入力した値で置き換える場合は、既定値のバインドを解除し、新しい既定値で置き換えるかどうかを確認するメッセージが表示されます。

  • テキスト文字列を入力するには、値を単一引用符 (') で囲みます。 二重引用符 (") は引用符で囲まれた識別子用に予約されているため、使用しないでください。

  • 数値の既定値を入力するには、引用符で囲まずに番号を入力します。

  • オブジェクトまたは関数を入力するには、引用符で囲まずにオブジェクト名または関数名を入力します。

  • Azure Synapse Analytics では、既定の制約に使用できるのは定数だけです。 式は、既定の制約には使用できません。

アクセス許可

この記事で説明するアクションには、テーブルに対する ALTER ALTER アクセス許可が必要です。

SQL Server Management Studio を使用して既定値を指定する

SSMS でオブジェクト エクスプローラーを使用して、テーブルの列の既定値を指定できます。 そのためには、次の手順に従います。

  1. SSMS を使用して SQL Server インスタンスに接続します。

  2. オブジェクト エクスプローラーで、有効桁数を変更する列が含まれているテーブルを右クリックして、[デザイン] を選択します。

  3. 既定値を指定する列を選択します。

  4. [列のプロパティ] タブで、 [既定値またはバインド] プロパティに新たな既定値を入力します。

    数値の既定値を入力するには、数値を入力します。 オブジェクトまたは関数の場合は、その名前を入力します。 英数字の場合は、その値を単一引用符で囲んで入力します。

  5. [ファイル] メニューで、[<<テーブル名>> を保存] を選択します。

Transact-SQL を使用して既定値を指定する

T-SQL を送信することにより、さまざまな方法で列の既定値を指定できます。 次の各例では、次の手順で新しい Transact-SQL クエリを開くことができます。

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

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

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

名前付き制約を使用する

データベース プロジェクトを使用する場合は、名前を持つ制約を作成することをお勧めします。 それ以外の場合、既定の制約にはシステムによって生成される名前が与えられます。これは、データベース オブジェクトが作成される各 SQL サーバー環境で異なります。

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

ALTER TABLEを使用する

ALTER TABLEを使用して、既存のテーブルに名前付き制約を追加できます。

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT
); -- Allows nulls.
GO

INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO

CREATE TABLEを使用する

CREATE TABLEを使用して、既定の制約を持つ新しいテーブルを作成できます。

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

作成日を設定する

次の例では、sysdatetimeoffset() システム関数を使用して、dateinserted 列の行値に行が作成された日付を設定します。

CREATE TABLE dbo.test (
    id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
    ,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);

既定の制約は、行が更新されるときに変更されません。 行が変更されるたびに値を更新するには、トリガーテンポラル テーブル計算列、またはバイナリ文字列 rowversion を使用することを検討してください。 ストアド プロシージャを実行することで、ビジネスロジック、既定値、およびその他のデータ整合性規則を適用できるため、行を直接挿入するのではなく、ストアド プロシージャを使用して行を挿入することも検討してください。

変更された行を検出する場合は、変更データ キャプチャ (CDC)変更トラッキング時間テーブル、または 台帳テーブルの使用を検討してください。