Como título, tengo una tabla existente que ya está poblada con 150000 registros. He agregado una columna de identificación (que actualmente es nula).
Supongo que puedo ejecutar una consulta para llenar esta columna con números incrementales, y luego establecerla como clave principal y activar el incremento automático. ¿Es esta la forma correcta de proceder? Y si es así, ¿cómo lleno los números iniciales?
sql-server
sql-server-2008
primary-key
alter-table
Miedo de planetas
fuente
fuente
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
pero no quería probarlo sin consultar con un experto :) Ref. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
eso implica queNOT NULL
está en su lugar, así que de nuevo, no es absolutamente necesario. Pero prefiero ser explícita y así siempre tengo laNOT NULL
hay, sólo para estar absolutamente claroPRIMARY KEY
, el índice agrupado se crea automáticamente para usted (a menos que especifique explícitamenteNONCLUSTERED
)No puede "activar" la IDENTIDAD: es una reconstrucción de la tabla.
Si no le importa el orden de los números, agregaría la columna, NO NULL, con IDENTIDAD de una vez. 150k filas no es mucho.
Si necesita conservar algún orden numérico, agregue los números en consecuencia. Luego, use el diseñador de tablas SSMS para establecer la propiedad IDENTITY. Esto le permite generar una secuencia de comandos que hará que la columna se suelte / agregue / guarde números / vuelva a cargar por usted.
fuente
ALTER TABLE ... SWITCH
puede hacerlo sin eso.Tuve este problema, pero no pude usar una columna de identidad (por varias razones). Me decidí por esto:
Prestado de aquí .
fuente
Si la columna ya existe en su tabla y es nula, puede actualizar la columna con este comando (reemplazar id, nombre de tabla y clave de tabla):
fuente
Cuando agregamos una columna de identidad en una tabla existente, se rellenará automáticamente sin necesidad de rellenarla manualmente.
fuente
por el diseñador puede establecer identidad (1,1) haga clic derecho en tbl => diseño => en parte izquierda (clic derecho) => propiedades => en columnas de identidad seleccione #columna
Propiedades
columna de identidad
fuente
Si su tabla tiene relación con otras tablas que usan su clave primaria o foriegen, es posible que sea imposible alterar su tabla. por lo que debe soltar y crear la tabla nuevamente.
Para resolver estos problemas, debe generar scripts haciendo clic con el botón derecho en la base de datos y, en la opción avanzada, configure el tipo de datos en script para esquema y datos. después de eso, usando este script con el cambio de su columna para identificar y regenerar la tabla usando ejecutar su consulta.
su consulta será como aquí:
fuente
Aquí hay una idea que puedes probar. Tabla original: sin columna de identidad tabla1 cree una nueva tabla: llame a tabla2 junto con la columna de identidad. copie los datos de la tabla1 a la tabla2: la columna de identidad se rellena automáticamente con números con incremento automático.
cambie el nombre de la tabla original - tabla1 a tabla3 cambie el nombre de la nueva tabla - tabla2 a tabla1 (tabla original) Ahora tiene la tabla1 con la columna de identidad incluida y rellenada para los datos existentes. después de asegurarse de que no haya ningún problema y de que funcione correctamente, suelte la tabla3 cuando ya no sea necesario.
fuente
Cree una nueva tabla con 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 EMPLEADO, reemplace con EMPLEADOS.
Sin embargo, debe eliminar la tabla de EMPLEADOS existente o hacer algún ajuste de acuerdo con sus requisitos.
fuente
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 primaria, pero no está marcada como incremento automático. El siguiente script verifica las columnas, la existencia y lo agrega con el indicador de autoincremento habilitado.
fuente
fuente
alter table / ** pega el nombre del tabal ** / add id int IDENTITY (1,1)
eliminar de / ** pegar el nombre del tabal ** / where id in
(
seleccione a.id FROM / ** pegue el nombre del tabal / como una IZQUIERDA EXTERIOR IZQUIERDA (SELECCIONE MIN (id) como id FROM / pegue el nombre del tabal / GROUP BY / pegue las columnas c1, c2 .... ** /
DONDE t1.id ES NULO
)
alter table / ** pega el nombre del tabal ** / DROP COLUMN id
fuente
Pruebe algo como esto (primero en una tabla de prueba):
No he probado esto en absoluto, ¡así que ten cuidado!
fuente
IDENTITY
columnas) y no funcionaría de todos modos.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
no puedes simplemente arrojarteMAX
allí. ¿Dónde hay unaWHERE
cláusula para evitar simplemente actualizar repetidamente la misma fila?Esto funciona en MariaDB, así que solo espero que lo haga en SQL Server: suelte la columna de ID que acaba de insertar, luego use la siguiente sintaxis: -
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, la convierte en el índice primario y la rellena con valores secuenciales. Si SQL Server no hace esto, mis disculpas por perder su tiempo.
fuente
ALTER TABLE table_name ADD COLUMN ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT; Esto podría ser útil.
fuente