2013-02-18 180 views
0
alter table dbo.transactions 
add constraint tk_paiement check ([Date_paiementdu]=[dateTransaction] +(30)) 

我想date_paiementdu爲30日成立的datetransaction之後,但它不工作SQL Server的日期約束

需要一些幫助!感謝

回答

2

您已經定義CHECK約束,但你似乎想要的是一個computed column

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

啊..和2日期是(日期類型),當即時通訊做查詢 此錯誤彈出 「操作數類型衝突:日期與詮釋不兼容」 – 2013-02-19 00:03:36

+0

請看到更新的答案。 – 2013-02-19 00:04:49

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實際上將存儲要被顯示在列中的數據,而省略其將保持列,每當它需要時間計算出的虛擬列。

+0

+1。好答案。 – 2013-02-19 00:10:30

+0

@MitchWheat與堅持竟是一個錯誤的第一個,我說堅持到答案,並添加你爲什麼會想用堅持的原因之前意外COMMITED更新。 – GarethD 2013-02-19 00:13:20

+0

謝謝哥們真的很有幫助:) – 2013-02-19 00:13:22

0

一個數據庫標準化的原則是不存儲的計算值。考慮到這一點,你也許可以用這樣的實現自己的目標:

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

如何做到這一點的細節是特定於RDBMS的,你沒有指定你的。