如何表示除了一行之外不为null的值?

时间:2013-04-13 09:38:42

标签: tsql sql-server-2008-r2 constraints

我正在尝试为简历的实体建模,并且这样做我遇到了以下问题:除了最近持有的职位之外的所有职位都有结束日期

是否有一种很好的方法来限制最多允许为null的一行。事件更好的是单个允许的null也有最新的开始日期。

另一种说法是你可以指定一个约束,说“除非”,否则为“

注意:这是我正在进行的一项学习练习(而不是处理生产代码)。 这是我正在使用的脚本表:

CREATE TABLE [dbo].[Employers](
    [Id] [uniqueidentifier] NOT NULL,
    [City] [nvarchar](max) NULL,
    [State] [nvarchar](max) NULL,
    [StartMonth] [int] NULL,
    [StartYear] [int] NOT NULL,
    [EndMonth] [int] NULL,
    [EndYear] [int] NULL,
    [Name] [nvarchar](max) NULL,
    [Label] [nvarchar](max) NULL,
    [Resume_Id] [uniqueidentifier] NULL,
    [UserProfile_UserId] [int] NULL,
PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[Employers]  WITH CHECK ADD  CONSTRAINT [Resume_Employers] FOREIGN KEY([Resume_Id])
REFERENCES [dbo].[Resumes] ([Id])
GO

ALTER TABLE [dbo].[Employers] CHECK CONSTRAINT [Resume_Employers]
GO

ALTER TABLE [dbo].[Employers]  WITH CHECK ADD  CONSTRAINT [UserProfile_Employers] FOREIGN KEY([UserProfile_UserId])
REFERENCES [dbo].[UserProfile] ([UserId])
GO

ALTER TABLE [dbo].[Employers] CHECK CONSTRAINT [UserProfile_Employers]
GO

1 个答案:

答案 0 :(得分:1)

您可以设置一个肯定是无效的日期,例如31.12.9999而不是NULL,然后在应用端进行检查。否则,您可以设置一个布尔字段来显示某人是否已退出所描述的位置。

我认为保留单个NULL值没有多大意义。如果你确实需要它,那么创建一个程序来检查它并在每次插入或更新操作之前调用它。

P.S。当一个人当时没有工作时你没有考虑这个案例,所以所有职位都有一个结束日期 P.P.S.为什么你把月份和年份保持为两个不同的int字段?只需使用date