Il est possible de créer une clé primaire ou un index unique dans une instruction SQL Server CREATE TABLE. Est-il possible de créer un index non unique dans une instruction 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
Là encore, le but est de créer l'index non unique dans l'instruction CREATE TABLE, et non après.
Pour ce que ça vaut, je n'ai pas trouvé [l'entrée de la documentation en ligne de SQL Server pour CREATE TABLE] utile.
De plus, [Cette question] est presque identique, mais la réponse acceptée ne s'applique pas.
la source
Error: (1146) Table 'tablename' doesn't exist
, hahahah, ironiqueSelon la documentation de T-SQL CREATE TABLE , en 2014, la définition de colonne prend en charge la définition d'un index:
et la grammaire est définie comme:
Ainsi, une grande partie de ce que vous pouvez faire en tant qu'instruction distincte peut être effectuée en ligne. J'ai remarqué que ce
include
n'est pas une option dans cette grammaire, donc certaines choses ne sont pas possibles.Vous pouvez également avoir des index en ligne définis comme une autre ligne après les colonnes, mais dans l'instruction create table, et cela autorise plusieurs colonnes dans l'index, mais toujours pas de
include
clause:Par exemple ici, nous ajoutons un index sur les deux colonnes c et d:
la source
C'est une déclaration distincte.
Il n'est pas non plus possible d'insérer dans une table, de faire une sélection et de créer un index dans la même instruction.
L'entrée BOL contient les informations dont vous avez besoin:
Vous pouvez créer un index sur un champ PK, mais pas un index non clusterisé sur un champ non contraint non-pk non unique.
Un index NCL n'est pas pertinent pour la structure de la table et n'est pas une contrainte sur les données à l'intérieur de la table. C'est une entité distincte qui prend en charge la table mais qui ne fait pas partie intégrante de sa fonctionnalité ou de sa conception.
C'est pourquoi c'est une déclaration distincte. L'index NCL n'est pas pertinent pour la table du point de vue de la conception (nonobstant l'optimisation des requêtes).
la source
La réponse acceptée sur la façon de créer un index en ligne un script de création de table n'a pas fonctionné pour moi. Cela a fait:
N'oubliez pas que les clés étrangères ne créent pas d'index, il est donc recommandé de les indexer, car vous les rejoindrez probablement.
la source