SQL Server可空列中创建唯一约束,如何做到允许多个null值

默认情况下,惟一索引最多只能有一条数据是null(多条就不唯一了),从SQL Server 2008开始,可以在创建唯一索引时添加“不包含null的where条件”,实现创建允许有多个null值的唯一索引

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;

在SQL Server 2008之前的版本中,通常是通过变通将null设为newid()或设为主键的值来避免多null违反约束的情况:

1种方法是直接在该列中将插入null值替换成newid()或主键值,

另1种方法则是不为该“唯一列”创建唯一索引,而是新建一计算列,该计算列的公式为“该列为空时等于newid()或主键值,不为空时等于该‘唯一列’的值,并将唯一索引变成为该计算列创建,来间接实现【好处是真正要保持唯一的列可以放心写入null值,而不用替换成newid()或主键值,数据可读性更好】

参考:

https://blog.csdn.net/xiaojia_boke/article/details/80524262

https://www.databasejournal.com/ms-sql/unique-column-with-multiple-null-values/

你可能感兴趣的:(数据库,唯一性索引null,多个null值的惟一索引)