2009-08-31 12 views
25
create table ImagenesUsuario 
{ 
    idImagen int primary key not null IDENTITY 
} 

Esto no funciona. ¿Cómo puedo hacer esto?¿Crear identidad de SQL como clave principal?

+7

Para el futuro, cuando diga "Esto no funciona", considere explicar a qué se refiere. ¿Silenciosamente falla de alguna manera? ¿Recibes un error y, de ser así, cuál es el error? ¿Su computadora se quema espontáneamente? ¿Falla al crear la tabla o insertar filas en la tabla? –

Respuesta

55

simple cambio en la sintaxis es todo lo que se necesita:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) primary key 
) 

Al utilizar explícitamente la palabra clave "restricción", se puede dar la restricción de clave primaria de un nombre particular en lugar de en función de SQL Server para asignación automática un nombre:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) constraint pk_ImagenesUsario primary key 
) 

agregar la palabra clave "Agrupado" si eso tiene más sentido basado en el uso de la tabla (es decir, el saldo de búsquedas de una idImagen particular y cantidad de la escritura es mayor que los beneficios de la agrupación de la tabla por algún otro índice).

8

Esto es similar a los scripts que generamos en nuestro equipo. Primero crea la tabla, luego aplica pk/fk y otras restricciones.

CREATE TABLE [dbo].[ImagenesUsuario] (
    [idImagen] [int] IDENTITY (1, 1) NOT NULL 
) 

ALTER TABLE [dbo].[ImagenesUsuario] ADD 
    CONSTRAINT [PK_ImagenesUsuario] PRIMARY KEY CLUSTERED 
    (
     [idImagen] 
    ) ON [PRIMARY] 
+2

¿Hay alguna razón por la que evite crear la clave primaria en la declaración create table? –

+3

Supongo que originalmente imitamos los scripts producidos por herramientas como Enterprise Manager. Transmite que está creando una restricción de clave primaria (a diferencia de una propiedad de columna). También le permite nombrar la restricción. Al final, ambas formas funcionan, así que supongo que es una cuestión de preferencia sobre cuál es más fácil de leer/mantener. – Mayo

1

Si está utilizando T-SQL, lo único malo con su código es que utilizó apoyos {} en lugar de paréntesis ().

PD: Ambos IDENTITY y PRIMARY KEY implican NOT NULL, por lo que puede omitir eso si lo desea.

Cuestiones relacionadas