我不想让我的数据库用户输入比2017-03-18
更大的日期。如何将这个约束添加到我的表中? 这是对的吗?检查SQL中的约束条件
(Year([ContractEnd])<2017) and (Month([ContractEnd])<03) and (Day([ContractEnd])<18)
我不想让我的数据库用户输入比2017-03-18
更大的日期。如何将这个约束添加到我的表中? 这是对的吗?检查SQL中的约束条件
(Year([ContractEnd])<2017) and (Month([ContractEnd])<03) and (Day([ContractEnd])<18)
尝试
[ContractEnd] DATE CHECK ([ContractEnd] <= '20170318')
您可以像添加约束到现有的表像这样:
alter table t add constraint chk_ContractEnd_lt_20170319
check (ContractEnd<'20170319');
rextester演示:http://rextester.com/FQWFMI88817
create table t (
id int not null identity(1,1)
, ContractEnd date
/* at table creation */
, constraint chk_ContractEnd_lt_20170319 check (ContractEnd<'20170319')
)
alter table t drop constraint chk_ContractEnd_lt_20170319;
/* to existing table */
alter table t add constraint chk_ContractEnd_lt_20170319
check (ContractEnd<='20170318');
insert into t values ('20161231')
insert into t values ('20170318')
/* all good */
insert into t values ('20170319')
/* -- Error, constraint violation */
如果数据类型是'datetime'或'datetime2',那么使用'ContractEnd''20170102' '可能是必要的。 –
@BaconBits的确如此。 – SqlZim
什么的'型ContractEnd'? 'DATETIME'? – Marusyk
不,这是不对的。您的代码中的值与您声明的日期不符。并且没有必要像这样检查一个日期(时间)。 –
列类型是Date。 – kwram