2012-06-11 26 views
10

Estoy trabajando en una base de datos SQL, tengo una columna llamada "Precio". Cuando se creó la base de datos, la columna "Precio" se estableció en NVARCHAR. Necesito cambiar su tipo a decimal(18, 2) sin perder los datos en la base de datos. Esto debe hacerse mediante un script SQLCambiar el tipo de columna sin perder datos

Pensé en crear una nueva columna, mover los datos a ella, eliminar la columna anterior y cambiar el nombre de la columna recién creada.

¿Alguien me puede ayudar con un ejemplo sobre cómo hacer esto? También hay una función en SQL para analizar cadena a decimal?

Gracias

+0

¿Ha hecho alguna investigación sobre cómo hacer esto? ¿Qué tienes y dónde estás atrapado? – Pablo

Respuesta

14

No es necesario añadir una nueva columna dos veces, basta con retirar el viejo después de actualizar el nuevo:

ALTER TABLE table_name ADD new_column_name decimal(18,2) 

update table_name 
set new_column_name = convert(decimal(18,2), old_column_name) 

ALTER TABLE table_name DROP COLUMN old_column_name 

Tenga en cuenta que si el old_column_name no es numérico, el convert puede fallar.

+5

Falta el paso donde se cambia el nombre de new_column_name a old_column_name, aún +1 –

0

Puede realizar esos cambios visualmente utilizando Management Studio. Luego, use el botón "Generar secuencia de comandos de cambio" para obtener la secuencia de comandos de los cambios que realizó. Asegúrese de realizar todas las pruebas en una copia de la BBDD original, en caso de que algo va mal ..

+0

Nota: cómo encontrar eso: http://stackoverflow.com/questions/6247556/generate-changes-script –

2

algo como

Modificar tabla [MyTable] Añadir columna nuevoPrecio decimal (18,2) null

entonces

Update [MyTable] Ajuste nuevoPrecio = Convert (decimal (18,2), [Precio]) donde el precio no es nulo

Si lo anterior falla, entonces usted tendrá que reforzar que para hacer frente a los divertidos

Una vez que esté satisfecho, suelte la columna anterior con una Tabla alternativa y cambie el nombre a la nueva con sp_rename

Cuestiones relacionadas