Es posible crear una clave principal o un índice único dentro de una instrucción CREATE TABLE de SQL Server. ¿Es posible crear un índice no único dentro de una instrucción 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
Nuevamente, el objetivo es crear el índice no único dentro de la instrucción CREATE TABLE, no después de ella.
Por lo que vale, no encontré que la [entrada de los Libros en pantalla de SQL Server para CREAR TABLA] sea útil.
Además, [esta pregunta] es casi idéntica, pero la respuesta aceptada no se aplica.
fuente
Error: (1146) Table 'tablename' doesn't exist
, jajaja, irónicoSegún la documentación CREATE TABLE de T-SQL , en 2014 la definición de columna admite la definición de un índice:
y la gramática se define como:
Por lo tanto, mucho de lo que puede hacer como una declaración separada se puede hacer en línea. Noté
include
que no es una opción en esta gramática, por lo que algunas cosas no son posibles.También puede tener índices en línea definidos como otra línea después de las columnas, pero dentro de la declaración de creación de tabla, y esto permite múltiples columnas en el índice, pero aún sin
include
cláusula:Por ejemplo, aquí agregamos un índice en ambas columnas c y d:
fuente
Es una declaración separada.
Tampoco es posible insertar en una tabla y seleccionar de ella y construir un índice en la misma declaración.
La entrada BOL contiene la información que necesita:
Puede crear un índice en un campo PK, pero no un índice no agrupado en un campo restringido no único que no sea pk.
Un índice NCL no es relevante para la estructura de la tabla y no es una restricción sobre los datos dentro de la tabla. Es una entidad separada que soporta la mesa pero no es parte integral de su funcionalidad o diseño.
Por eso es una declaración separada. El índice NCL es irrelevante para la tabla desde una perspectiva de diseño (a pesar de la optimización de consultas).
fuente
La respuesta aceptada de cómo crear un índice en línea, un script de creación de tablas no funcionó para mí. Esto hizo:
Recuerde, las claves externas no crean índices, por lo que es una buena práctica indexarlas, ya que es muy probable que se una a ellas.
fuente