alter table dbo.transactions
add constraint tk_paiement check ([Date_paiementdu]=[dateTransaction] +(30))
我想date_paiementdu
爲30日成立的datetransaction之後,但它不工作SQL Server的日期約束
需要一些幫助!感謝
alter table dbo.transactions
add constraint tk_paiement check ([Date_paiementdu]=[dateTransaction] +(30))
我想date_paiementdu
爲30日成立的datetransaction之後,但它不工作SQL Server的日期約束
需要一些幫助!感謝
您已經定義CHECK約束,但你似乎想要的是一個computed column:
alter table dbo.transactions
add tk_Date_paiementdu as (DateAdd(day, 30, [dateTransaction])
聽起來像是你想有一個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實際上將存儲要被顯示在列中的數據,而省略其將保持列,每當它需要時間計算出的虛擬列。
+1。好答案。 – 2013-02-19 00:10:30
@MitchWheat與堅持竟是一個錯誤的第一個,我說堅持到答案,並添加你爲什麼會想用堅持的原因之前意外COMMITED更新。 – GarethD 2013-02-19 00:13:20
謝謝哥們真的很有幫助:) – 2013-02-19 00:13:22
一個數據庫標準化的原則是不存儲的計算值。考慮到這一點,你也許可以用這樣的實現自己的目標:
where datediff(day, dateTransaction, Date_paiementdu) <= 30
如何做到這一點的細節是特定於RDBMS的,你沒有指定你的。
啊..和2日期是(日期類型),當即時通訊做查詢 此錯誤彈出 「操作數類型衝突:日期與詮釋不兼容」 – 2013-02-19 00:03:36
請看到更新的答案。 – 2013-02-19 00:04:49