我面临着一个令人困惑的问题。如果您创建如下所示的表,您将收到错误消息:
CREATE TABLE t
(
a NVARCHAR(100) SPARSE
NULL UNIQUE
)
Msg 1919, Level 16, State 2, Line 1
Column 'a' in table 't' is of a type that is invalid for use as a key column in an index.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
但是如果您先创建表,然后像这样创建唯一索引,则一切正常。
CREATE TABLE t
(
a NVARCHAR(100) SPARSE
NULL
)
CREATE UNIQUE NONCLUSTERED INDEX t_a ON dbo.t
(
a
)
谁能帮我解释一下吗?
谢谢!
最佳答案
我不知道为什么,但来自MSDN SPARSE columns
A sparse column cannot be part of a clustered index or a unique primary key index.
现在,进入猜想领域......
这有点有意义,因为 UNIQUE 约束无法被过滤,而显式索引可以。因此,UNIQUE 约束是不允许的,但可以通过 CREATE INDEX 允许,其中您有一个隐含的过滤器。
我还想说不允许聚集索引,因为每个非聚集索引都引用聚集索引+聚集索引如果没有显式地(“uniquifier”)则必须是内部唯一的。所以每一行都必须存在。
总而言之,你必须有一些独特的和/或集群的东西:这会破坏使用 SPARSE 的意义......不是吗?
关于sql-server - (TSQL) nvarchar(200) 稀疏空列上的唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066753/