2017-06-13 118 views
0

我不想让我的数据库用户输入比2017-03-18更大的日期。如何将这个约束添加到我的表中? 这是对的吗?检查SQL中的约束条件

(Year([ContractEnd])<2017) and (Month([ContractEnd])<03) and (Day([ContractEnd])<18) 
+0

什么的'型ContractEnd'? 'DATETIME'? – Marusyk

+0

不,这是不对的。您的代码中的值与您声明的日期不符。并且没有必要像这样检查一个日期(时间)。 –

+0

列类型是Date。 – kwram

回答

0

尝试

[ContractEnd] DATE CHECK ([ContractEnd] <= '20170318') 
+0

我尝试了你所说的,但这里是错误:ALTER TABLE语句与CHECK约束“CK_Professor”冲突。冲突发生在数据库“大学”,表“dbo.Professor”,列'ContractEnd'。 – kwram

+0

@kwram当然,你应该删除名为CK_Professor的先前约束。之后使用'alter table Professor add constraint'。你知道如何去除它吗? – Marusyk

+0

你说得对,但我还没有对这个专栏设置任何限制!我没有这个专栏的限制。 – kwram

3

您可以像添加约束到现有的表像这样:

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 */ 
+0

如果数据类型是'datetime'或'datetime2',那么使用'ContractEnd''20170102' '可能是必要的。 –

+0

@BaconBits的确如此。 – SqlZim