我有一个表,有两列,Enter_Time和Leave_Time,如何编写一个强制实施约束的CREATE TABLE脚本Leave_Time> Enter_Time?设置SQL中两个字段之间的约束
编辑:Microsoft Access将使用
我有一个表,有两列,Enter_Time和Leave_Time,如何编写一个强制实施约束的CREATE TABLE脚本Leave_Time> Enter_Time?设置SQL中两个字段之间的约束
编辑:Microsoft Access将使用
CREATE TABLE foo (
Leave_Time DATETIME NOT NULL,
Enter_Time DATETIME NOT NULL,
CONSTRAINT CHK_TIMES CHECK (Leave_Time > Enter_Time));
CHECK(Leave_Time IS NULL或Leave_Time> Enter_Time)。最好让Enter_Time至少有一个非空列。 – 2009-02-16 05:17:24
这取决于你的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向导来编写上面的代码。
使用PostgreSQL:
CREATE TABLE foo (
-- other columns...
enter_time timestamptz NOT NULL,
leave_time timestamptz NOT NULL,
CONSTRAINT ck_interval CHECK (leave_time > enter_time)
);
你不说你用的是什么牌子的RDBMS。请注意,MySQL不支持CHECK约束,如大多数人的回答中所述。 – 2009-02-16 06:40:57
我正在使用Microsoft Access – Graviton 2009-02-16 07:24:29