将列值限制为0或在插入时唯一

时间:2011-06-20 17:02:49

标签: sql sql-server

我有一个表,其中int列应设置为零或表中尚不存在的值。我可以使用CHECK CONSTRAINT阻止在此类列中插入非零重复值,还是应该使用BEFORE INSERT触发器?如果我能用两者做到这一点,那么哪种设计更好?

从.NET窗体表单应用程序我们使用全局事务范围来包装保存,在这两种情况下我都希望插入失败并且事务完全回滚,所以我不知道是否应该放置在触发器内部回滚,这就是为什么我宁愿尝试检查一下。

数据库:SQL 2008

感谢。

3 个答案:

答案 0 :(得分:6)

请参阅Andriy M评论中的链接,它提到了2008年的新概念:过滤指数......

CREATE UNIQUE INDEX indexName ON tableName(columns) INCLUDE includeColumns WHERE columnName != 0

这将创建一个非0的唯一项索引。

任何插入重复非零值的尝试都会破坏索引的唯一性并导致错误。

答案 1 :(得分:2)

为什么使用零而不是null。如果你把它作为null,那么db会通过一个可以为空的唯一约束来轻松处理它。

答案 2 :(得分:1)

检查约束,如果使用得当,可以防止错误的数据。他们不会将坏数据改为好。出于这个原因,我会以触发器为目标。如果你可以满足0为NULL的需要,你可以使用一个唯一约束,但无论如何,提供答案都是触发器的工作。