対象者: SQL Server 2016 (13.x) および以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database in Microsoft Fabric
SQL Server Management Studio (SSMS) を使用して、テーブル列に入力される既定値を指定できます。 オブジェクト エクスプローラーを使用するか、Transact-SQL を実行してデフォルトを設定できます。
列にデフォルト値を割り当てず、ユーザーが列を空白のままにした場合、次のようになります。
NULL 値を許可するオプションを設定すると、列に
NULLが挿入されます。null 値を許可するオプションを設定しない場合、列は空白のままになります。ただし、ユーザーまたはアプリケーションは、列の値を指定しないと、行を挿入することはできません。
データベース レベルのデータ整合性を確保するために、さまざまなタスクに既定の制約を使用できます。
- 挿入時に "アクティブ" 列または "有効" 列の行の値を
1に設定します。 - 日付フィールドの行の値を現在の日付に設定します。
- フィールドの行の値を決定論的システム関数 (例:
DB_NAME()) に設定します。
Limitations
始める前に、次の制限事項と制約事項に注意してください。
バインドされた既定値 (かっこなしで表示されている値) を [既定値] フィールドに入力した値で置き換える場合は、既定値のバインドを解除し、新しい既定値で置き換えるかどうかを確認するメッセージが表示されます。
テキスト文字列を入力するには、値を単一引用符 (
') で囲みます。 二重引用符 (") は引用符で囲まれた識別子用に予約されているため、使用しないでください。数値の既定値を入力するには、引用符で囲まずに番号を入力します。
オブジェクトまたは関数を入力するには、引用符で囲まずにオブジェクト名または関数名を入力します。
Azure Synapse Analytics では、既定の制約に使用できるのは定数だけです。 式は、既定の制約には使用できません。
Permissions
この記事で説明するアクションには、テーブルに対する ALTER ALTER アクセス許可が必要です。
SQL Server Management Studio を使用して既定値を指定する
SSMS でオブジェクト エクスプローラーを使用して、テーブルの列の既定値を指定できます。 そのためには、次の手順に従います。
SSMS を使用して SQL Server インスタンスに接続します。
オブジェクト エクスプローラーで、有効桁数を変更する列が含まれているテーブルを右クリックして、[デザイン] を選択します。
既定値を指定する列を選択します。
[列のプロパティ] タブで、 [既定値またはバインド] プロパティに新たな既定値を入力します。
数値の既定値を入力するには、数値を入力します。 オブジェクトまたは関数の場合は、その名前を入力します。 英数字の場合は、その値を単一引用符で囲んで入力します。
[ファイル] メニューで、[<<テーブル名>> を保存] を選択します。
Transact-SQL を使用して既定値を指定する
T-SQL を送信することにより、さまざまな方法で列の既定値を指定できます。 次の各例では、次の手順で新しい Transact-SQL クエリを開くことができます。
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。
名前付き制約を使用する
データベース プロジェクトを使用する場合は、名前付き制約を作成することをお勧めします。 そうしないと、既定の制約にはシステムによって生成される名前が付けられます。これは、データベース オブジェクトが作成される 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)、変更トラッキング、時間テーブル、または 台帳テーブルの使用を検討してください。