SQL Server:创建非聚集索引而不为其指定名称

问题描述 投票:3回答:2

我使用SQL Server 2008。

我想在我的桌子上创建一个非聚集索引。我想检查是否存在创建此方法而不给索引命名的方法。

对于例如

CREATE TABLE #mytable (Date_ datetime NOT NULL, ID_ varchar(10) NOT NULL, Value_)

当我向此表添加PK时,我没有指定该键的名称。对于例如

ALTER TABLE #mytable ADD PRIMARY KEY CLUSTERED (Date_ ASC, ID_ ASC)

是否可以执行类似的操作来创建非聚集索引而不指定名称?

对于例如

ALTER TABLE #mytable ADD NONCLUSTERED INDEX (Date_, Value_)   -- FAILS!!!

我知道的唯一命令是

CREATE NONCLUSTERED INDEX *keyname* ON #mytable (Date_, Value_)  
sql-server indexing alter-table clustered-index non-clustered-index
2个回答
2
投票

不,没有名称就无法创建非聚集索引,语法非常明确:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name

index_name是索引的名称。索引名称在表或视图中必须是唯一的,但在数据库中不必是唯一的。索引名称必须遵循标识符规则。

CREATE INDEX (Transact-SQL)

数据库对象名称称为其标识符。 Microsoft SQL Server中的所有内容都可以具有标识符。服务器,数据库和数据库对象(例如表,视图,列,索引,触发器,过程,约束和规则)可以具有标识符。大多数对象都需要标识符,但对于某些对象(如约束)是可选的。

Database Identifiers


-1
投票

创建临时表后用guid作为索引名执行动态续集

DECLARE @NewId VARCHAR(64)= REPLACE(CHANGE(),' - ','');

EXEC('CREATE INDEX IX _'+ @ NewId +'ON #Table(ColA,ColB)INCLUDE(ColZ)');

© www.soinside.com 2019 - 2024. All rights reserved.