![]() |
1
1406
您所寻找的确实是ANSI标准SQL:92、SQL:1999和SQL:2003的一部分,即唯一约束必须禁止重复的非空值,但接受多个空值。 但是,在SQL Server的Microsoft世界中,允许单个NULL,但不允许多个NULL。。。 在里面 ,可以基于排除空值的谓词定义唯一的筛选索引:
|
![]() |
2
169
SQL Server 2008+
您可以创建一个唯一的索引,该索引使用
不能创建唯一约束并允许为空。您需要设置NEWID()的默认值。 在创建唯一约束之前,将现有值更新为NEWID(),其中为NULL。 |
![]() |
3
48
SQL Server 2008及以上版本 只需筛选唯一索引:
您只需在计算列中放入一些内容,当实际需要的唯一列为NULL时,这些内容将保证在整个表中唯一。在这种情况下,,
即使
请注意,如果不需要索引,仍然可以通过添加关键字将表达式预先计算到磁盘来节省CPU
在SQL Server 2008及更高版本中,如果可能的话,一定要使用过滤后的解决方案! 争议 请注意,一些数据库专业人士会将此视为“代理null”的情况,这肯定会有问题(主要是由于试图确定某个内容何时为空的问题) 缺少数据的代理项值 ; 非空代理项值的数量疯狂地相乘也可能会出现问题)。 但是,我相信这个案例是不同的。我添加的计算列永远不会用于确定任何内容。它本身没有任何意义,也不编码在其他正确定义的列中尚未单独找到的信息。永远不要选择或使用它。
所以,我的故事是,这不是一个代理无效,我坚持它!因为我们实际上不希望非NULL值用于任何目的,除了欺骗
尽管如此,我不反对使用索引视图,但它带来了一些问题,比如使用
使现代化
如果您的列是数字列,则可能存在确保使用
|
![]() |
4
19
Microsoft SQL Server管理器
这适用于MSSQL 2012 |
![]() |
5
9
当我应用下面的唯一索引时:
每次非空更新和插入都失败,错误如下: 我发现这个 MSDN
我相信在代码中使用
但我还没有测试过这个 |
![]() |
6
8
|
![]() |
7
6
你可以用一只手来做
|
![]() |
8
4
可以在聚集索引视图上创建唯一约束 您可以按如下方式创建视图:
唯一的约束是:
|
![]() |
9
2
|
![]() |
10
1
如前所述,SQL Server在处理问题时没有实现ANSI标准
|
![]() |
11
1
您可以创建一个 而不是 下面是一个例子:
|
![]() |
12
1
这样,您就不必为列的唯一性和可空性而烦恼了。如果一个人没有借书证,他们就不会在借书证表中有记录。此外,如果有关于图书卡的附加属性(可能是到期日期或其他),那么您现在就有了放置这些字段的逻辑位置。 |
![]() |
13
-1
|
![]() |
14
-1
|
![]() |
15
-1
|
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 1 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
Java · 使用交叉应用同时显示两列 2 年前 |