多列唯一性约束的SQL条件限制

3

我希望在我的数据库中设置一个条件约束:

enter image description here

你可以看到我的 "CreatedBy" 列由于遗留数据问题缺少了一些条目。
我的新代码确保填写了 "CreatedBy"。
问题:
我想通过添加条件约束来确保没有人可以输入重复的条目到数据库中。该约束定义一个行应该是唯一的通过 "AnswerID"、"PollID" 和 "CreatedBy"... 只有当 "CreatedBy" 不为空时。
它可能看起来像这样:
CONSTRAINT UNIQUE BY AnswerID, PollID, CreatedBy WHERE CreatedBy IS NOT NULL

有没有想法,它是否可能?


@a_horse_with_no_name - 谢谢,希望有所帮助。 - Jimmyt1988
2个回答

6
当然,使用 筛选索引
CREATE UNIQUE NONCLUSTERED INDEX <indexName>
    ON <tableName> (AnswerID, PollID, CreatedBy)  
    WHERE CreatedBy IS NOT NULL;  

如果您说“非空”,那么可以使用以下代码:

CREATE UNIQUE NONCLUSTERED INDEX <indexName>
    ON <tableName> (AnswerID, PollID, CreatedBy)  
    WHERE CreatedBy IS NOT NULL
      AND CreatedBy <> N''; 

2
太美了,真是太美了(擦去眼泪)。谢谢,我现在就试试! - Jimmyt1988

1
如果版本早于2008年:

CREATE VIEW dbo.vw_Tablename
WITH SCHEMABINDING AS
SELECT AnswerID, PollID, CreatedBy
FROM dbo.Tablename
WHERE CreatedBy IS NOT NULL;

GO

CREATE UNIQUE CLUSTERED INDEX UIX_vw_Tablename 
  ON dbo.vw_Tablename(AnswerID, PollID, CreatedBy)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接