多列上的SQL条件约束是唯一的

时间:2017-10-19 14:42:03

标签: sql sql-server tsql

我想对我的数据库有一个条件约束:

enter image description here

您可以看到我的CreatedBy列因遗留数据问题而丢失了一些条目。

我的新代码可确保填写CreatedBy

问题:

我想确保没有人可以通过添加条件约束来向数据库输入重复的条目。定义AnswerIDPollIDCreatedBy只有CreatedBy不为空的行才能排成一行

可能看起来像这样:

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

任何想法是否可能?

2 个答案:

答案 0 :(得分:5)

当然,请使用filtered index

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

或者,既然你说'#34;不是空的&#34;然后这样的事情应该做:

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

答案 1 :(得分: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)