首页 > 解决方案 > SQL Server:默认约束不起作用

问题描述

我的代码有一个小问题。我添加了一个默认约束,但由于某种原因它不想工作。我的代码:

CREATE TABLE oc.students 
(
    stud_id INT PRIMARY KEY IDENTITY (1,1),
    first_name VARCHAR(50) NOT NULL,
    mid_name VARCHAR(50),
    last_name VARCHAR(50) NOT NULL,
    DOB DATE,
    email VARCHAR (255) NOT NULL,
    country VARCHAR(50) NOT NULL,
    phone VARCHAR(20),
    reg_date DATE NOT NULL
);

ALTER TABLE oc.students
ADD DEFAULT GETDATE() FOR [reg_date];

INSERT INTO oc.students (first_name, mid_name, last_name, DOB, email, country, phone, reg_date)
VALUES ('John', '', 'Smith', '1986-12-24', 'js@gmail.com', 'Malta', 123456789, '')

SELECT * 
FROM oc.students

结果:

在此处输入图像描述

可能是什么问题呢?

标签: sqlsql-servertsql

解决方案


''并且NULL不一样(嗯,在Oracle以外的任何数据库中)。第一个是恰好没有字符的字符串。第二种是SQL常量值,具有“未知值”的语义,常用于缺失值。

您正在插入''被解释为 的0,它被转换为基准日期。实际上,这方面的技术术语是epoch,它是 a 用于开始计算日期/时间值的日期。

如果你想要默认值,你可以使用:

VALUES (
    'John',
    '',
    'Smith',
    '1986-12-24',
    'js@gmail.com',
    'Malta',
    123456789,
    DEFAULT
    )

或者,更常见的是,该列被省略:

INSERT INTO oc.students (
                    first_name,
                    mid_name,
                    last_name,
                    DOB,
                    email,
                    country,
                    phone)
VALUES (
    'John',
    '',
    'Smith',
    '1986-12-24',
    'js@gmail.com',
    'Malta',
    123456789
    )

推荐阅读