我想在列上创建约束,但仅限于部分数据。
情况如下:我们在一个表中拥有所有下拉列表的所有值。为了将它们分开,我们有一个名为dropdowntype
的鉴别器。
现在我想创建一个约束,但必须考虑dropdowntype
。
约束条件是:下拉列表可以具有默认值。每个dropdowntype只允许零个或一个记录,true
的值为isdefault
。
因此true
可能存在多个值为isdefault
的记录,但它们对dropdowntype
的值都应该不同。
编辑:但是,给定dropdowntype
允许值为false的多个值。
这可能吗?
(然后作为奖励,我还想在另一个nullable
列上设置约束,该列的所有值都为null或具有值,对于给定的dropdowntype
也是如此。但也许当第一个问题得到解答时,我会弄清楚如何自己做这个。)
表:
CREATE TABLE [dbo].[DropDownValues](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[CreateDate] [datetime] NOT NULL,
[IsActive] [bit] NOT NULL,
[IsDefaultValue] [bit] NOT NULL,
[Description] [nvarchar](1000) NULL,
[IsOtherItem] [bit] NOT NULL,
[Dropdowntype] [tinyint] NOT NULL,
CONSTRAINT [PK_ddv] 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]
答案 0 :(得分:2)
要回答问题1,您需要dropdowntype
和isdefault
上的复合唯一键。伪代码:
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(dropdowntype, isdefault)
WHERE isdefault IS NOT NULL;
你可以在问题的第二部分做同样的事情。它们的关键是 WHERE isDefault IS NOT NULL ,它允许您在可空列上创建唯一约束。