2017-10-19 257 views
3

我想对我的数据库中的条件约束:SQL上多列是唯一的条件约束

enter image description here

你可以看到,我的CreatedBy列有几个条目由于遗留数据的问题丢失。

我的新代码确保CreatedBy被填写。

问:

我想,以确保没有人可以通过增加一个条件约束输入重复的条目到数据库。它定义了一个行应AnswerIDPollIDCreatedBy是唯一的......只有当CreatedBy不为空

这可能是这样的:

CONSTRAINT UNIQUE BY AnswerID, PollID, CreatedBy WHERE CreatedBy IS NOT NULL 

任何想法,如果它是可能的吗?

+0

@a_horse_with_no_name - 谢谢,希望帮助 – Jimmyt1988

回答

5

当然,使用filtered index

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

0

如果版本低于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)