sql - 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
结果:
可能是什么问题呢?
解决方案
''
并且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
)
推荐阅读
- cassandra - 在 Cassandra 中每次作业运行时查找大约 40k 条记录和 1.5 亿条记录?
- java - 如何在java中编写未经检查的Throwable
- mysql - SQL SUM 和 GROUP BY
- java - 初始化变量不会改变?
- kubernetes - Kubernetes Autoscaling 额外的自定义指标
- authorization - CouchDB 和 validate_doc_read 函数
- azure - 请求令牌时出现图形 API 失败错误:令牌不包含权限,或者无法理解权限
- pine-script - 如何在 pine 脚本中分配最近的接近变量?
- c - 未能找到 CCS 操作 ibusb-0.1.so.4 的系统库
- php - Registration is not deleted using a confirmation modality in laravel