2011-12-08 14 views
5

Tengo una columna llamada Lastmodified, con un tipo de datos de Date, pero debería haber sido DateTime.Convertir columna de fecha a fecha Sql Servidor

¿Hay alguna forma de convertir la columna?

Cuando utilizo la función de 'diseño' de SQL Server Management Studio me sale el siguiente error:

Saving changes is not permitted. The changes you have made require the following table to be dropped and re-created.

No realmente interesado en eliminar la tabla, sólo quiero saber si es posible convertir una columna de Date a Datetime o tengo que eliminar la columna y crear una nueva con el tipo de datos correcto?

+0

Claro que se puede convertir esto - pero al hacerlo, el diseñador visual en SQL Server Gestión de Estudio va a crear la nueva tabla con 'DATETIME', copiar los datos, y luego eliminar la tabla de edad, y hay una opción en 'Herramientas> Opciones 'que previene eso por defecto - vea mi respuesta –

Respuesta

20

No debería necesitar soltar la tabla y volver a crearla, a menos que esa columna forme parte de una o más restricciones.

Sólo puede hacerlo utilizando SQL:

ALTER TABLE Tab ALTER COLUMN LastModified datetime2 not null 

(me eligieron datetime2 sobre datetime, ya que el primero es recommended for all new development work, y puesto que la columna es actualmente date, sé que estás en SQL Server 2008 o más adelante)

+0

+1 Es uno de los errores de SSMS. –

+0

Estoy usando SQL Server con el nombre en código "Denali" Management Studio, por lo que no parece que van a cambiar, la forma en que funciona. – gulbaek

2

eso es sólo un entorno de seguridad en SQL Server Gestión de Estudio - se puede apagarlo, si eres aventurero :-)

enter image description here

Desactive la casilla de verificación allí y que puede hacer lo que quiera!

+0

Si esta opción está desactivada, ¿SQL Server ignorará' CONSTRAINT's? –

+0

@Igor: no, no lo creo. Esta opción solo evita los cambios en las tablas de la base de datos que maneja el diseñador visual al recrear la tabla (con la nueva estructura) en lugar de simplemente ejecutar una sola instrucción T-SQL –

2

No se puede cambiar el tipo de columna en su lugar. Debe crear una nueva columna, copiar los valores y luego soltar la columna original.

SQL Management Studio normalmente logra esto creando una tabla temporal con el nuevo nombre de columna, copiando los valores, soltando la tabla original con la columna anterior y luego cambiando el nombre de la nueva tabla temporal por el nuevo nombre. A menudo lo hace sin que las personas se den cuenta.

Sin embargo, este puede ser un enfoque muy invasivo, especialmente si ya tiene muchas filas en la tabla, por lo que puede escribir un script SQL, agregar la nueva columna a la tabla, copiar los valores, suelte la columna original y luego use sp_rename para cambiar el nuevo nombre de la columna temporal al nombre de la columna original. Esta es la misma idea que SQL Management Studio, excepto que están descartando y volviendo a crear toda la tabla, y solo está bajando y volviendo a crear la columna.

Sin embargo, si desea permitir que SQL Manangement Studio lo haga de esta manera, puede desactivar ese mensaje de error. Creo que se agregó originalmente porque las personas no dejaron caer la tabla y recrearla de forma predeterminada. Para desactivar este mensaje, vaya a Herramientas-> Opciones-? Diseñadores, y desmarque "Impedir guardar cambios que requieren la recreación de la tabla", luego debería poder guardar los cambios en el diseñador.

Prevent saving changes that require table re-creation

+0

Puede lograrlo mucho más fácil. –

+0

¿Cuidar para elaborar? –

+0

Lo siento. Quise decir la respuesta de Damien_The_Unbeliever. –

Cuestiones relacionadas