2009-02-16 153 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) 
);