primary not foreign drop create autoincrement sql-server sql-server-2008 primary-key alter-table

not - SQL Server agrega clave principal de incremento automático a la tabla existente



create table sql server primary key autoincrement (13)

ALTER TABLE table_name AGREGAR ID DE COLUMNA INT NO NULA TECLA PRIMARIA AUTO_INCREMENT; Esto podría ser útil

Como título, tengo una tabla existente que ya está poblada con 150000 registros. He añadido una columna de identificación (que actualmente es nula).

Supongo que puedo ejecutar una consulta para completar esta columna con números incrementales, y luego establecerla como clave principal y activar el incremento automático. ¿Es esta la manera correcta de proceder? Y si es así, ¿cómo lleno los números iniciales?


Aquí hay una idea que puedes probar. Tabla original - sin columna de identidad table1 cree una nueva tabla - llame a table2 junto con la columna de identidad. copie los datos de table1 a table2: la columna de identidad se rellena automáticamente con números incrementados automáticamente.

cambie el nombre de la tabla original - tabla1 a tabla3 cambie el nombre de la tabla nueva - tabla2 a tabla1 (tabla original) Ahora tiene la tabla1 con la columna de identidad incluida y completada para los datos existentes. después de asegurarse de que no haya problemas y de que funcione correctamente, suelte la tabla3 cuando ya no sea necesario.


Cree una nueva tabla con un nombre diferente y las mismas columnas, clave principal y asociación de clave externa y vincule esto en su declaración de código Insert. Por ejemplo: para EMPLEADOS, reemplazarlos 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 de EMPLEADOS existente o realizar algunos ajustes de acuerdo con sus requisitos.


Cuando agregamos una columna de identidad en una tabla existente, se rellenará automáticamente sin necesidad de rellenarla manualmente.


Esta respuesta es una pequeña adición a la respuesta más votada y funciona para SQL Server. La pregunta solicitó una clave principal de incremento automático, la respuesta actual agrega la clave principal, pero no se marca como incremento automático. La siguiente secuencia de comandos verifica las columnas, la existencia y la agrega con el indicador de autoincremento 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


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

ALTER TABLE table_name ADD id INT TECLA PRIMARIA AUTO_INCREMENT;

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


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

USE your_database_name GO WHILE (SELECT COUNT(*) FROM your_table WHERE your_id_field IS NULL) > 0 BEGIN SET ROWCOUNT 1 UPDATE your_table SET your_id_field = MAX(your_id_field)+1 END PRINT ''ALL DONE''

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


No se puede "activar" la IDENTIDAD: es una reconstrucción de la tabla.

Si no te importa el orden de los números, agregarás la columna, NO NULA, con IDENTIDAD de una sola vez. 150k filas no es mucho.

Si necesita conservar algún orden de números, agregue los números en consecuencia. Luego use el diseñador de tablas SSMS para establecer la propiedad IDENTITY. Esto le permite generar un script que hará que la columna suelte / agregue / guarde los números / reinicie por usted.


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

UPDATE x SET x.<Id> = x.New_Id FROM ( SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id FROM <tablename> ) x


Si su tabla tiene relación con otras tablas usando su clave principal o foriegen, puede ser imposible alterar su tabla. así que necesitas soltar y crear la tabla otra vez.
Para resolver estos problemas, necesita Generar secuencias de comandos haciendo clic con el botón derecho en la base de datos y, en la opción avanzada, configure el tipo de datos a secuencia de comandos a esquema y datos. después de eso, use este script 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


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 here


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

Properties

columna de identidad


No, tienes que hacerlo al revés: agrégalo desde el INT IDENTITY como INT IDENTITY - se llenará con 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 prefieres hacer todo en un solo paso:

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