我发现创建 UNIQUE CLUSTERED 索引时,我不必指定名称:
CREATE TABLE [#TEMP01]
(
[TradeDate] DATE NOT NULL
UNIQUE CLUSTERED([TradeDate])
);
我认为 SQL Server 正在内部为上述索引生成一个名称。
当我尝试创建
NONUNIQUE
/NONCLUSTERED
索引时,我不得不提供一个名称:
CREATE TABLE [#TEMP02]
(
[TradeDate] DATE NOT NULL
INDEX [IX_TradeDate] NONCLUSTERED([TradeDate])
);
我可以创建非唯一内联索引而无需提供名称吗?
不,你不能。
内联索引的语法定义您必须提供名称
<column_index> ::=
INDEX index_name [ CLUSTERED | NONCLUSTERED ]
[ WITH ( <index_option> [ ,... n ] ) ]
.....
对于表级索引(可能是多列):
<table_index> ::=
{
{
INDEX index_name [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
( column_name [ ASC | DESC ] [ ,... n ] )
| INDEX index_name CLUSTERED COLUMNSTORE
| INDEX index_name [ NONCLUSTERED ] COLUMNSTORE ( column_name [ ,... n ] )
}
[ INCLUDE ( column_name [ ,... n ] ) ]
....
您最初提到的不是唯一聚集索引,而是唯一聚集约束。确实可以在不提供名称的情况下定义约束,但建议您指定一个名称。这两者之间的主要区别在于索引可以有
INCLUDE
列和 WHERE
过滤器,而约束则不能。两者都可以用作外键的目标。