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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值