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
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