我想对我的数据库有一个条件约束:
您可以看到我的CreatedBy
列因遗留数据问题而丢失了一些条目。
我的新代码可确保填写CreatedBy
。
问题:
我想确保没有人可以通过添加条件约束来向数据库输入重复的条目。定义AnswerID
,PollID
和CreatedBy
只有CreatedBy
不为空的行才能排成一行
可能看起来像这样:
CONSTRAINT UNIQUE BY AnswerID, PollID, CreatedBy WHERE CreatedBy IS NOT NULL
任何想法是否可能?
答案 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)