Sql server日期约束

时间:2013-02-18 23:56:21

标签: sql sql-server

alter table dbo.transactions
add constraint tk_paiement check ([Date_paiementdu]=[dateTransaction] +(30))

我想在日期交易后30天设置date_paiementdu,但它不起作用

需要一些帮助!感谢

3 个答案:

答案 0 :(得分:2)

您已定义了CHECK约束,但您想要的是computed column

alter table dbo.transactions 
add tk_Date_paiementdu as (DateAdd(day, 30, [dateTransaction])

答案 1 :(得分:2)

听起来你想要computed column而不是检查约束:

ALTER TABLE yourTable 
ADD Date_paiementdu AS DATEADD(DAY, 30, dateTransaction);

如果您希望列不可为空或索引,那么您将需要使用PERSISTED并且DateTransaction也需要不可为空:

ALTER TABLE yourTable 
ADD Date_paiementdu AS DATEADD(DAY, 30, dateTransaction) PERSISTED NOT NULL;

为了进一步澄清使用PERSISTED将实际存储要在列中显示的数据,省略它将使列保持为每次需要时计算的虚拟列。

答案 2 :(得分:0)

数据库规范化的一个原则是不存储计算值。考虑到这一点,您可以通过以下方式实现目标:

where datediff(day, dateTransaction, Date_paiementdu) <= 30

如何完成此操作的详细信息是特定于RDBMS的,您没有指定自己的。