2009-02-16 23 views
0

我有一個表,有兩列,Enter_Time和Leave_Time,如何編寫一個強制實施約束的CREATE TABLE腳本Leave_Time> Enter_Time?設置SQL中兩個字段之間的約束

編輯:Microsoft Access將使用

+0

你不說你用的是什麼牌子的RDBMS。請注意,MySQL不支持CHECK約束,如大多數人的回答中所述。 – 2009-02-16 06:40:57

+0

我正在使用Microsoft Access – Graviton 2009-02-16 07:24:29

回答

2
CREATE TABLE foo (
    Leave_Time DATETIME NOT NULL, 
    Enter_Time DATETIME NOT NULL, 
    CONSTRAINT CHK_TIMES CHECK (Leave_Time > Enter_Time)); 
+0

CHECK(Leave_Time IS NULL或Leave_Time> Enter_Time)。最好讓Enter_Time至少有一個非空列。 – 2009-02-16 05:17:24

1

這取決於你的SQL數據庫引擎。假設的Microsoft SQL Server:

CREATE TABLE [dbo].[Timecard](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [EnterTime] [datetime] NULL, 
    [LeaveTime] [datetime] NULL, 
CONSTRAINT [PK_Timecard] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
ALTER TABLE [dbo].[Timecard] WITH CHECK ADD CONSTRAINT [CK_Timecard] CHECK (([EnterTime]<[LeaveTime])) 
GO 
ALTER TABLE [dbo].[Timecard] CHECK CONSTRAINT [CK_Timecard] 

但是你的問題是如何寫......我纔剛剛替你寫。 如何做到這一點更爲普遍:我使用Microsoft SQL Server Management Studio Express(免費程序)並使用GUI創建了表和約束。然後我問它的CREATE腳本。這樣我就不必成爲SQL嚮導來編寫上面的代碼。

3

使用PostgreSQL

CREATE TABLE foo (
    -- other columns... 

    enter_time timestamptz NOT NULL, 
    leave_time timestamptz NOT NULL, 
    CONSTRAINT ck_interval CHECK (leave_time > enter_time) 
);