Как создать некластеризованный индекс в Create Table?
Create table FavoriteDish
(
FavID int identity (1,1) primary key not null,
DishID int references Dishes(DishID) not null ,
CelebrityName nvarchar(100) nonclustered not null
)
В результате получается Incorrect syntax near the keyword 'nonclustered'
.
Я ссылался на справку MSDN для синтаксиса create table. Я не уверен, что здесь не так.
Ответы
Ответ 1
В помощи в онлайн-книгах действительно упоминается ключевое слово CLUSTERED, но это относится только к ограничениям UNIQUE или PRIMARY KEY. Оба эти ограничения создают индекс, и вы можете указать, должен ли этот индекс быть кластеризованным или некластеризованным.
Вы не можете использовать этот синтаксис для создания стандартного некластеризованного индекса.
Create table FavoriteDish
(
FavID int identity (1,1) primary key not null,
DishID int references Dishes(DishID) not null ,
CelebrityName nvarchar(100) constraint ux_CelebrityName unique NONCLUSTERED not null
)
Ответ 2
Удалите это некластеризованное ключевое слово и используйте оператор CREATE INDEX, чтобы добавить индекс в эту таблицу, документация по нему может быть прочитана в:
http://msdn.microsoft.com/en-us/library/ms188783.aspx
Синтаксис здесь:
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]
[ ON { partition_scheme_name ( column_name )
| filegroup_name
| default
}
]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
[ ; ]
Код находится здесь:
CREATE NONCLUSTERED INDEX index_clustered ON FavoriteDish(CelebrityName asc)