SQL 使用行式操作设置列默认值

SQL column default value set using row wise operations

是否可以在 SQL 列中设置默认值以包含其他列?例如,在下面的 table 中,是否可以将 EndDate 默认设置为 StartDate + NoOfDays?所以在插入的时候,我只需要做 INSERT INTO xxx VALUES StartDate NoOfDays.

您可以使用 generated column:

create table mytable (
    startdate datetime not null,
    noofdays int not null,
    enddate datetime as (startdate + interval noofdays day)
);

然后您将按如下方式插入:

insert into mytable (startdate, noofdays) values(now(), 3);

生成:

startdate           | noofdays | enddate            
:------------------ | -------: | :------------------
2020-12-12 01:28:27 |        3 | 2020-12-15 01:28:27

Demo on DB Fiddle

请注意,这与您在问题中提到的 default 并不完全相同。默认值适用于常规列,仅在 insert 时间未提供值时使用。另一方面,不能直接写入生成的列。


编辑

在SQL服务器中:

create table mytable (
    startdate datetime not null,
    noofdays int not null,
    enddate as dateadd(day, noofdays, startdate)
)

Demo