SQL Server agrega la clave primaria de incremento automático a la tabla existente

Como título, tengo una tabla existente que ya está llena con 150000 registros. He agregado una columna Id (que actualmente es nula).

Estoy asumiendo que puedo ejecutar una consulta para llenar esta columna con números incrementales, y luego configurarla como clave principal y activar el incremento automático. ¿Es esta la forma correcta de proceder? Y si es así, ¿cómo llené los números iniciales?

No, tienes que hacerlo al revés: agrégalo desde el INT IDENTITY como INT IDENTITY : estará lleno de valores de identidad cuando hagas esto:

 ALTER TABLE dbo.YourTable ADD ID INT IDENTITY 

y luego puedes convertirla en la clave principal:

 ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID) 

o si prefiere hacer todo en un solo paso:

 ALTER TABLE dbo.YourTable ADD ID INT IDENTITY CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED 

No puede “encender” la IDENTIDAD: es una reconstrucción de tabla.

Si no le importa el orden numérico, debe agregar la columna, NOT NULL, con IDENTITY de una vez. 150k filas no es mucho.

Si necesita conservar algún orden numérico, agregue los números correspondientes. Luego use el diseñador de tablas SSMS para establecer la propiedad IDENTITY. Esto le permite generar una secuencia de comandos que hará la columna soltar / agregar / mantener números / resiembra por usted.

Tuve este problema, pero no pude usar una columna de identidad (por varias razones). Me decidí por esto:

 DECLARE @id INT SET @id = 0 UPDATE table SET @id = id = @id + 1 

Prestado de aquí .

Si la columna ya existe en su tabla y es nula, puede actualizar la columna con este comando (reemplace id, tablename y tablekey):

 UPDATE x SET x. = x.New_Id FROM ( SELECT , ROW_NUMBER() OVER (ORDER BY ) AS New_Id FROM  ) x 

Cuando agreguemos una columna de identidad en una tabla existente, se completará automáticamente sin necesidad de llenarla manualmente.

por el diseñador puede establecer la identidad (1,1) haga clic derecho en tbl => diseño => en la parte izquierda (clic derecho) => propiedades => en las columnas de identidad seleccione #columna

Propiedades

columna idendtity

Aquí hay una idea que puedes probar. Tabla original: sin columna de identidad tabla1 crear una tabla nueva: invocar tabla2 junto con columna de identidad. copie los datos de la tabla1 a la tabla2: la columna de identidad se completa automáticamente con números automáticos incrementados.

renombrar la tabla original – table1 a table3 renombrar la nueva tabla – table2 a table1 (tabla original) Ahora tiene la tabla1 con la columna de identidad incluida y poblada para los datos existentes. después de asegurarse de que no haya problemas y de que funcione correctamente, elimine la tabla 3 cuando ya no la necesite.

Cree una tabla nueva con nombre diferente y las mismas columnas, clave principal y asociación de clave externa y vincule esto en su instrucción de código Insertar. Por ejemplo: para EMPLEADO, reemplace con EMPLEADOS.

 CREATE TABLE EMPLOYEES( EmpId INT NOT NULL IDENTITY(1,1), F_Name VARCHAR(20) , L_Name VARCHAR(20) , DOB DATE , DOJ DATE , PRIMARY KEY (EmpId), DeptId int FOREIGN KEY REFERENCES DEPARTMENT(DeptId), DesgId int FOREIGN KEY REFERENCES DESIGNATION(DesgId), AddId int FOREIGN KEY REFERENCES ADDRESS(AddId) ) 

Sin embargo, debe eliminar la tabla EMPLOYEE existente o realizar algún ajuste de acuerdo con sus requisitos.

Si su tabla tiene relación con otras tablas que usan su clave primaria o foriegen, puede ser que sea imposible alterar su tabla. por lo que debe soltar y crear la tabla nuevamente.
Para resolver estos problemas, debe Generar secuencias de comandos haciendo clic con el botón derecho en la base de datos y en la opción avanzada establecer tipo de datos para secuencia de comandos de esquema y datos. después de eso, usando esta secuencia de comandos con el cambio de su columna para identificar y regenerar la tabla usando ejecutar su consulta.
su consulta será como aquí:

 USE [Db_YourDbName] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Drop TABLE [dbo].[Tbl_TourTable] CREATE TABLE [dbo].[Tbl_TourTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Family] [nvarchar](150) NULL) GO SET IDENTITY_INSERT [dbo].[Tbl_TourTable] ON INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1') SET IDENTITY_INSERT [dbo].[Tbl_TourTable] off 

Esta respuesta es una pequeña adición a la respuesta más votada y funciona para SQL Server. La pregunta solicitó una clave primaria de incremento automático, la respuesta actual agrega la clave principal, pero no se marca como autoincremento. El script siguiente verifica las columnas, existencia, y lo agrega con el indicador de autoincrement habilitado.

 IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName') BEGIN ALTER TABLE dbo.YourTable ADD PKColumnName INT IDENTITY(1,1) CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED END GO 

ALTER TABLE table_name ADD COLUMN ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT; Esto podría ser útil

Pruebe algo como esto (en una tabla de prueba primero):

 USE su_database_name
 IR
 MIENTRAS (SELECT COUNT (*) FROM your_table WHERE your_id_field IS NULL)> 0
 EMPEZAR
     SET ROWCOUNT 1
     ACTUALIZA your_table SET your_id_field = MAX (your_id_field) +1
 FIN
 IMPRIMIR 'TODO HECHO'

No he probado esto en absoluto, ¡así que ten cuidado!

Esto funciona en MariaDB, así que solo espero que lo haga en SQL Server: coloque la columna de ID que acaba de insertar, luego use la siguiente syntax:

ALTER TABLE table_name ADD id INT PRIMARY KEY AUTO_INCREMENT;

No hay necesidad de otra mesa. Esto simplemente inserta una columna de identificación, lo convierte en el índice principal y lo rellena con valores secuenciales. Si SQL Server no hace esto, le pido disculpas por perder el tiempo.