Dimungkinkan untuk membuat kunci utama atau indeks unik dalam pernyataan SQL Server CREATE TABLE. Apakah mungkin untuk membuat indeks non-unik dalam pernyataan CREATE TABLE?
CREATE TABLE MyTable(
a int NOT NULL
,b smallint NOT NULL
,c smallint NOT NULL
,d smallint NOT NULL
,e smallint NOT NULL
-- This creates a primary key
,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)
-- This creates a unique nonclustered index on columns b and c
,CONSTRAINT IX_MyTable1 UNIQUE (b, c)
-- Is it possible to create a non-unique index on columns d and e here?
-- Note: these variations would not work if attempted:
-- ,CONSTRAINT IX_MyTable2 INDEX (d, e)
-- ,CONSTRAINT IX_MyTable3 NONCLUSTERED INDEX (d, e)
);
GO
-- The proposed non-unique index should behave identically to
-- an index created after the CREATE TABLE statement. Example:
CREATE NONCLUSTERED INDEX IX_MyTable4 ON MY_TABLE (d, e);
GO
Sekali lagi, tujuannya adalah untuk membuat indeks non-unik dalam pernyataan CREATE TABLE, bukan setelahnya.
Untuk apa nilainya, saya tidak menemukan [entri SQL Server Books Online untuk CREATE TABLE] untuk membantu.
Selain itu, [Pertanyaan Ini] hampir sama, tetapi jawaban yang diterima tidak berlaku.
sumber
Error: (1146) Table 'tablename' doesn't exist
, hahahah, ironicSesuai dokumentasi T-SQL CREATE TABLE , pada tahun 2014 definisi kolom mendukung pendefinisian indeks:
dan tata bahasa didefinisikan sebagai:
<column_index> ::= INDEX index_name [ CLUSTERED | NONCLUSTERED ] [ WITH ( <index_option> [ ,... n ] ) ] [ ON { partition_scheme_name (column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
Jadi banyak hal yang dapat Anda lakukan sebagai pernyataan terpisah dapat dilakukan secara inline. Saya perhatikan
include
tidak ada opsi dalam tata bahasa ini sehingga beberapa hal tidak memungkinkan.CREATE TABLE MyTable( a int NOT NULL ,b smallint NOT NULL index IX_MyTable_b nonclustered ,c smallint NOT NULL ,d smallint NOT NULL ,e smallint NOT NULL )
Anda juga dapat menetapkan indeks sebaris sebagai baris lain setelah kolom, tetapi dalam pernyataan buat tabel, dan ini memungkinkan beberapa kolom dalam indeks, tetapi tetap tidak ada
include
klausa:< table_index > ::= { { INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] ) | INDEX index_name CLUSTERED COLUMNSTORE | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] ) } [ WITH ( <index_option> [ ,... n ] ) ] [ ON { partition_scheme_name (column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] }
Misalnya di sini kami menambahkan indeks pada kedua kolom c dan d:
CREATE TABLE MyTable( a int NOT NULL ,b smallint NOT NULL index IX_MyTable_b nonclustered ,c smallint NOT NULL ,d smallint NOT NULL ,e smallint NOT NULL ,index IX_MyTable_c_d nonclustered (c,d) )
sumber
Ini pernyataan terpisah.
Ini juga tidak mungkin untuk menyisipkan ke dalam tabel dan memilih darinya dan membangun indeks dalam pernyataan yang sama juga.
Entri BOL berisi informasi yang Anda butuhkan:
Anda dapat membuat indeks pada bidang PK, tapi bukan indeks non-cluster pada bidang non-pk non-unique-constrained.
Indeks NCL tidak relevan dengan struktur tabel, dan bukan merupakan kendala pada data di dalam tabel. Ini adalah entitas terpisah yang mendukung tabel tetapi tidak integral dengan fungsionalitas atau desainnya.
Itulah mengapa ini adalah pernyataan terpisah. Indeks NCL tidak relevan dengan tabel dari perspektif desain (meskipun demikian pengoptimalan kueri).
sumber
Jawaban yang diterima tentang cara membuat Indeks sebaris skrip pembuatan Tabel tidak berfungsi untuk saya. Ini dilakukan:
CREATE TABLE [dbo].[TableToBeCreated] ( [Id] BIGINT IDENTITY(1, 1) NOT NULL PRIMARY KEY ,[ForeignKeyId] BIGINT NOT NULL ,CONSTRAINT [FK_TableToBeCreated_ForeignKeyId_OtherTable_Id] FOREIGN KEY ([ForeignKeyId]) REFERENCES [dbo].[OtherTable]([Id]) ,INDEX [IX_TableToBeCreated_ForeignKeyId] NONCLUSTERED ([ForeignKeyId]) )
Ingat, Kunci Asing tidak membuat Indeks, jadi praktik yang baik untuk mengindeksnya karena Anda kemungkinan besar akan bergabung dengannya.
sumber