2011-07-21 13 views
49

Tengo una tabla configurada que actualmente no tiene clave principal. Todo lo que necesito hacer es agregar una clave principal, sin nulo, auto_increment.¿Cómo agrego una clave primaria auto_increment en la base de datos de SQL Server?

Estoy trabajando con una base de datos Microsoft SQL Server. Entiendo que no se puede hacer en un solo comando, pero cada comando que intento sigue respondiendo errores de sintaxis.

edición ---------------

He creado la clave primaria e incluso configurarlo como no nulo. Sin embargo, no puedo configurar el auto_increment.

que he probado:

ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment 
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment 
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment 
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment 

estoy usando NVARCHAR porque no me dejaba SET no NULL bajo int

+1

¿Por qué no puede simplemente agregar una nueva columna de IDENTIDAD? –

+2

http://stackoverflow.com/questions/4862385/sql-server-add-auto-increment-primary-key-to-exuntable-table –

+0

Fuera de interés, ¿de dónde viene la sintaxis 'auto_increment'? ¿Es acceso? –

Respuesta

102

Se puede hacer en un solo comando. Es necesario establecer la propiedad IDENTITY de "número de automóviles"

ALTER TABLE MyTable ADD mytableID int NOT NULL IDENTITY (1,1) PRIMARY KEY 

Más precisamente para establecer una tabla denominada nivel de restricción

ALTER TABLE MyTable 
    ADD MytableID int NOT NULL IDENTITY (1,1), 
    ADD CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (MyTableID) 

Ver ALTER TABLE and IDENTITY en MSDN

+1

¡PERFECTO! gracias por tu ayuda. Aceptaré la respuesta una vez que el temporizador me lo permita. : D – dcp3450

+4

está bien, pero la sintaxis correcta es sin la segunda "ADD", que es: ALTER TABLE ADD MiTabla MytableID int identidad no NULL (1,1), CONSTREÑIMIENTO PK_MyTable PRIMARIA clave agrupada (MyTableID) –

19

Si la tabla ya contiene datos y desea cambiar una de las columnas a la identidad:

Primero cree una nueva tabla que tenga las mismas columnas y especifique la clave principal-kolumn:

create table TempTable 
(
    Id int not null identity(1, 1) primary key 
    --, Other columns... 
) 

luego copiar todas las filas de la tabla original a la nueva tabla utilizando un insert -statement estándar.

A continuación, suelte la tabla original.

Y, por último cambiar el nombre de TempTable a lo que usted desee mediante sp_rename:

http://msdn.microsoft.com/en-us/library/ms188351.aspx

+0

este crear la sintaxis de la tabla es ** buena práctica ** según lo aconsejado por el autor de [este] (http://stackoverflow.com/a/4862427/2218697) publicar en los comentarios, la esperanza ayuda a alguien. – stom

11

También puede realizar esta acción a través de SQL Server Management Studio.

Haga clic derecho en su tabla seleccionada -> Modificar

Haga clic derecho sobre el campo que desea establecer como PK -> Establecer clave principal

En Propiedades de conjunto de columnas "Identidad Especificación" a Sí , luego especifique el valor de inicio y el valor de incremento.

Luego, en el futuro si quieren ser capaces de solo escritura de este tipo de cosa que puede hacer clic derecho sobre la mesa que acaba de modificar y seleccione

"SCRIPT tabla como" -> CREE A

para que pueda ver por sí mismo la sintaxis correcta para realizar esta acción.

1

Si tiene la columna, es muy fácil.

Utilizando el diseñador, puede establecer la columna como identidad (1,1): haga clic con el botón derecho en la tabla → diseño → en parte izquierda (clic derecho) → propiedades → en columnas de identidad, seleccione # columna.


Propiedades:

enter image description here

columna de identidad:

enter image description here

0

En SQL Server 2008:

  • Haga clic derecho sobre la tabla
  • Ir a diseñar
  • Seleccione tipo de dato numérico
  • Añadir nombre a la nueva columna
  • Hacer Identidad especificación a 'SÍ'
-2

puede probar esto. .. ALTER TABLE Your_Table ADD table_ID int NOT NULL PRIMARY KEY auto_increment;

Cuestiones relacionadas