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

时间:2014-10-24 21:00:23

标签: sql-server indexing alter-table clustered-index non-clustered-index

我使用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_)  

2 个答案:

答案 0 :(得分:2)

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

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
  

INDEX_NAME   是索引的名称。索引名称在表格中必须是唯一的   查看但不必在数据库中是唯一的。索引名称必须   遵循标识符规则。

CREATE INDEX (Transact-SQL)

  

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

Database Identifiers

答案 1 :(得分:-1)

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

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

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