sql - por - Agregue una columna a la tabla existente y numere de forma única
eliminar columna sql (8)
Ayudaría si publicaras qué base de datos SQL estás usando. Para MySQL, probablemente quiera auto_increment:
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
Sin embargo, no estoy seguro de si esto aplica los valores de forma retroactiva. Si no es así, solo debería poder iterar sobre sus valores con un procedimiento almacenado o en un programa simple (siempre que nadie más esté escribiendo en la base de datos) y configurar la función LAST_INSERT_ID()
para generar el valor de identificación. .
Deseo agregar una columna a una base de datos heredada existente y escribir un procedimiento mediante el cual pueda asignar a cada registro un valor diferente. Algo así como agregar una columna y generar automáticamente los datos para ello.
Al igual, si agrego una nueva columna llamada "ID" (número), quiero inicializar un valor único para cada uno de los registros. Entonces, mi columna de ID tendrá registros de, digamos, 1 a 1000. ¿Cómo hago eso?
Depende de la base de datos ya que cada base de datos tiene una forma diferente de agregar números de secuencia. Alteraría la tabla para agregar la columna y luego escribiría una secuencia de comandos db en groovy / python / etc para leer los datos y actualizar la identificación con una secuencia. Una vez que se hayan establecido los datos, agregaría una secuencia a la tabla que comienza después del número superior. Una vez que se han establecido los datos, configure las claves principales correctamente.
Esto dependerá de la base de datos, pero para SQL Server, esto se puede lograr de la siguiente manera:
alter table Example
add NewColumn int identity(1,1)
Si no desea que su nueva columna sea de tipo IDENTITY
(autoincremento) o si desea especificar el orden en que se numeran sus filas, puede agregar una columna de tipo INT NULL
y luego rellenarla como esta. En mi ejemplo, la nueva columna se llama MyNewColumn y la columna de la clave principal existente para la tabla se llama MyPrimaryKey.
UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
SELECT MyPrimaryKey,
ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
FROM MyTable
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey
Esto funciona en SQL Sever 2005 y versiones posteriores, es decir, versiones que admiten ROW_NUMBER()
Solo usar una ALTER TABLE debería funcionar. Agregue la columna con el tipo apropiado y una bandera de IDENTIDAD y debería hacer el truco
Consulte este artículo de MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx en la sintaxis de ALTER TABLE
Y el equivalente de Postgres (la segunda línea es obligatoria solo si quiere que "id" sea una clave):
ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
para Oracle, podrías hacer algo como debajo
alter table mytable add (myfield integer);
update mytable set myfield = rownum;
para el tipo de datos UNIQUEIDENTIFIER en el servidor sql prueba esto
Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())
Si desea crear una clave primaria de esa columna, use esto
ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);