開発者リファレンス : データ アクセス方法 : SQL Engine Reference : SQL 構文リファレンス : DEFAULT
  
このページをシェアする                  
DEFAULT
テーブルには、ヌル値を許可しない列が 1 つ以上ある場合があります。エラーを回避するために、新しいレコードのそれらの列が必ず有効な値を持つよう、列のデフォルト値を定義しておくことは有用です。これを行うには、列定義の CREATE または ALTER で DEFAULT キーワードを使用して、INSERT および UPDATE ステートメントで使用される列値を設定します。この値は、次の一方または両方に当てはまる場合に使用されます。
明確な列値が指定されていない。
列ではバイナリ ゼロを使用できず、ヌル以外の有効な値を必要とする。
デフォルトの列値を定義すると、行を挿入または更新するときに VALUES 句で DEFAULT キーワードを使用すれば、その値を指定することができます。
要約すると、DEFAULT キーワードは次の場合に使用することができます。
CREATE TABLE の列定義
ALTER TABLE の列定義
INSERT の VALUES 句
UPDATE の VALUES 句
デフォルト値はリテラルまたは式です。CREATE TABLE または ALTER TABLE ステートメントでは、次の条件を満たしている必要があります。
列のデータ型と一致している
列に設定されている範囲や長さなどの制約に従っている
INSERT および UPDATE ステートメントでは、DEFAULT 式が定義されている列については、Zen が式を評価し、その結果を挿入または更新時に書き込みます。INSERT の場合、既存レコードの列は変更されないことに留意してください。
構文
DEFAULT キーワードの使用については、次のステートメントの構文を参照してください。
ALTER TABLE
CREATE TABLE
CREATE FUNCTION
CREATE PROCEDURE
INSERT
UPDATE
備考
次のトピックで説明されているあらゆる列に対して、DEFAULT としてリテラル値や式を指定することができます。
IDENTITY データ型の制限
列のデフォルト値としてのスカラー関数および単純な式
ALTER TABLE での DEFAULT の使用
IDENTITY データ型の制限
CREATE TABLE ステートメントまたは ALTER TABLE ステートメントでは、IDENTITY、SMALLIDENTITY、BIGIDENTITY データ型にデフォルト値ゼロ(DEFAULT 0 または DEFAULT '0')を設定することができます。これらのデータ型では、それ以外のデフォルト値は許可されません。
列のデフォルト値としてのスカラー関数および単純な式
Zen では、リテラル値やヌル値のほかに、列と同じデータ型の値を返しさえすれば、スカラー関数や単純な式を使用して DEFAULT 値を定義することができます。たとえば、CHAR や VARCHAR の文字列型の列に USER() を使用することができます。新しい INSERT ステートメントおよび UPDATE ステートメントでそれが使用されたときに、戻り値が評価されます。
次の例は、DEFAULT として単純な式やさまざまなスカラー関数を使用する方法を示します。
CREATE TABLE DEFAULTSAMPLE (
   a INT DEFAULT 100,
   b DOUBLE DEFAULT PI(),
   c DATETIME DEFAULT NOW(),
   d CHAR(20) DEFAULT USER(),
   e VARCHAR(10) DEFAULT UPPER(DAYNAME(CURDATE())),
   f VARCHAR(40) DEFAULT '{'+CONVERT(NEWID(),SQL_VARCHAR)+'}',
   g INTEGER DEFAULT DAYOFYEAR(NOW())
   );
INSERT INTO DEFAULTSAMPLE DEFAULT VALUES;
SELECT * FROM TX;
         a                         b                                c   d
===========   =======================   ==============================   ===================
100         3.141592653589793          2021-11-12 17:25:59.288   Master
 
e           f                                                  g
=========   =======================================   ==========
FRIDAY      {EF66F711-36D2-40FA-B928-BAFCC486DA6B}           316
ALTER TABLE での DEFAULT の使用
ALTER TABLE を使用して、DEFAULT 属性を追加するように列定義を変更する場合は、その列に定義済みのすべての属性を含める必要があります。これは、ALTER TABLE を使用して列を変更すると、既存の定義に属性を追加するのではなく、既存の定義を置き換えるからです。また、次の例に示すように、列を変更して DEFAULT 値を変えても、既存の値には影響しません。
CREATE TABLE Tab10 (a INT, b CHAR(20) CASE); --列 b は大文字小文字を無視します
ALTER TABLE Tab10 ALTER COLUMN b CHAR(20) DEFAULT 'xyz'; --列 b はデフォルト値を持ちますが、大文字小文字を無視しなくなりました
INSERT INTO Tab10 DEFAULT VALUES;
SELECT * FROM Tab10;
         a   b
===========   ====================
(Null)   xyz
1 行が影響を受けました。
SELECT * FROM Tab10 WHERE b = 'XYZ'; --大文字小文字が一致しないので、行は返されません
         a   b
===========   ====================
0 行が影響を受けました。
ALTER TABLE Tab10 ALTER COLUMN b CHAR(20) CASE DEFAULT 'xyz'; --列 b は大文字小文字を無視し、「かつ」デフォルト値を持つようになりました
SELECT * FROM Tab10 WHERE b = 'XYZ'; --大文字小文字が一致する必要はありません
         a   b
===========   ====================
(Null)   xyz
1 行が影響を受けました。
次のステートメントはテーブル Tab5 を作成します。列 col5 のデフォルト値は 200 とします。
CREATE TABLE Tab5
(col5 INT DEFAULT 200)
============ 
次のステートメントはテーブル Tab1 を作成し、列 col1 は NOW() から返された結果の DATE 部分とします。
CREATE TABLE Tab1
(col1 DATE DEFAULT NOW())
============ 
次のステートメントはテーブル Tab8 を作成し、列 col8 は、INSERT または UPDATE ステートメントの実行時間とします。
CREATE TABLE Tab8
(col8 TIMESTAMP DEFAULT CURRENT_TIMESTAMP())
============ 
次のステートメントはテーブル Tab6 を作成し、列 col6 は、INSERT または UPDATE ステートメント実行後のユーザー名とします。DEFAULT USER を実際に利用できるのは、セキュリティが有効になっている場合のみです。有効になっていない場合、USER は常にヌルです。キーワード USER は USER() 関数と同じ結果をもたらします。
CREATE TABLE Tab6
(col6 VARCHAR(20) DEFAULT USER)
============ 
次のステートメントは無効な例を示しています。TIME は DATE 列で許可されているデータ型ではないため、解析時エラーになります。
CREATE TABLE Tab
(col DATE DEFAULT CURTIME())
============ 
次のステートメントは無効な例を示しています。'3.1' は数値に変換できますが、それは有効な整数ではないため、解析時エラーになります。
CREATE TABLE Tab
(col SMALLINT DEFAULT '3.1')
============ 
次のステートメントは無効な例を示しています。CREATE TABLE ステートメントは成功しますが、-60000 は SMALLINT でサポートされる値の範囲外であるため、INSERT ステートメントは失敗します。
CREATE TABLE Tab
(col SMALLINT DEFAULT 3 * -20000)
INSERT INTO Tab values(DEFAULT)
============ 
次のステートメントは、IDENTITY および SMALLIDENTITY データ型にデフォルト値ゼロを設定する正しい例を示しています。
CREATE TABLE t1 ( c1 IDENTITY DEFAULT '0' )
ALTER TABLE t1 ALTER c1 SMALLIDENTITY DEFAULT 0
============ 
次のステートメントは、IDENTITY および SMALLIDENTITY データ型にデフォルト値を設定する無効な例を示しています。
CREATE TABLE t1 ( c1 IDENTITY DEFAULT 3 )
ALTER TABLE t1 ALTER c1 SMALLIDENTITY DEFAULT 1
関連項目
ALTER TABLE
CREATE TABLE
CREATE FUNCTION
CREATE PROCEDURE
INSERT
UPDATE