Quiero 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 autogenerar los datos para ella.
Por ejemplo, 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 say 1 to 1000
.
¿Cómo puedo hacer eso?
sql
sql-server
Adhip Gupta
fuente
fuente
Respuestas:
Esto dependerá de la base de datos, pero para SQL Server, esto podría lograrse de la siguiente manera:
fuente
Prevent saving changes that require table re-creation
desmarque esa casilla y podrá agregar una columna de identidad incluso utilizando el guiSería útil si publicaras qué base de datos SQL estás usando. Para MySQL probablemente desee auto_increment:
Sin embargo, no estoy seguro si esto aplica los valores retroactivamente. Si no es así, debería poder iterar sobre sus valores con un procedimiento almacenado o en un programa simple (siempre y cuando nadie más esté escribiendo en la base de datos) y establecer el uso de la
LAST_INSERT_ID()
función para generar el valor de identificación.fuente
para Oracle podrías hacer algo como a continuación
fuente
Y el equivalente de Postgres (la segunda línea es obligatoria solo si desea que "id" sea una clave):
fuente
Solo usar ALTER TABLE debería funcionar. Agregue la columna con el tipo adecuado y un indicador de IDENTIDAD y debería funcionar.
Consulte este artículo de MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx en la sintaxis ALTER TABLE
fuente
para el tipo de datos UNIQUEIDENTIFIER en el servidor sql intente esto
Si desea crear una clave principal a partir de esa columna, use esto
fuente
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 un script 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 hayan configurado los datos, configure las claves principales correctamente.
fuente
Si no desea que su nueva columna sea de tipo
IDENTITY
(incremento automático), o si desea ser específico sobre el orden en que se numeran sus filas, puede agregar una columna de tipoINT NULL
y luego completarla de esta manera. En mi ejemplo, la nueva columna se llama MyNewColumn y la columna de clave principal existente para la tabla se llama MyPrimaryKey.Esto funciona en SQL Sever 2005 y versiones posteriores, es decir, versiones que admiten
ROW_NUMBER()
fuente