Pregunta Cómo cambiar una columna sin dejar caer una tabla en SQL 2008


¿Por qué SQL 2008 de repente quiere abandonar mis tablas cuando voy a cambiar el tipo de columna de decir int a real? Esto nunca sucedió en SQL 2005, que yo sepa. Cualquier idea sería útil, por favor.


36
2018-01-20 04:53


origen


Respuestas:


En SQL Server 2008, vaya a Herramientas >> Opciones. En la pequeña ventana, haga clic en "Diseñador". Desmarque "Evitar guardar cambios que requieren ..."

=====

Editado el 4 de septiembre de 2015.

He agregado esta respuesta aquí hace mucho, mucho tiempo describiendo la forma en que resolvería la situación descrita en la pregunta anterior. Desde entonces, los usuarios en los temas a continuación han expuesto varias preocupaciones sobre hacer las cosas de la manera que recomendé en ese momento. Básicamente, la solución que describí podría ser problemática en algunos escenarios. Luego sugiero que continúe leyendo para verificar los comentarios de otros usuarios y elegir la mejor solución para usted.


30
2018-01-20 05:21



No puedo creer que la respuesta principal haya estado aquí por mucho tiempo, ¡es un consejo muy peligroso!

Hay pocas operaciones que puede realizar in situ sin dejar caer su tabla:

Si se encuentra en una situación en la que no es posible modificar una columna sin soltarla, generalmente puede usar un SELECT INTO  consulta para proyectar sus datos en una nueva tabla, luego suelte la tabla anterior (deshabilitando temporalmente las restricciones) y luego cambie el nombre de la tabla proyectada. Sin embargo, en este caso tendrá que dejar su base de datos fuera de línea para el mantenimiento.


42
2017-09-07 15:20



Esto es lo que uso:

-- Add new column
ALTER TABLE MyTable
ADD Description2 VARCHAR(MAX)
GO

-- Copy data to new column (probably with modifications)
Update MyTable
SET Description2 = Description
GO

-- Drop old column
ALTER TABLE MyTable
DROP COLUMN Description
GO

-- Rename new column to the original column's name.
sp_RENAME 'MyTable.Description2' , 'Description', 'COLUMN'
GO
  1. Copie los datos en una nueva columna.
  2. Suelta la vieja columna.
  3. Cambie el nombre de la nueva columna al nombre de la columna anterior.

30
2017-11-25 10:49



Tengo el mismo problema. A pesar de que mi cuenta tiene derechos de seguridad si intento usar otra cuenta sa, funciona. Parece que de alguna manera mi cuenta no tiene la capacidad de alterar. sigue investigando, pero es un problema de permiso.

actualizar:

No puedo expandirlo. pero esto es lo que hice. hay dos grupos de dominio a los que pertenece mi cuenta. Uno era un nuevo grupo de dominio AD y el otro era un grupo de dominios NT legay. Una vez que eliminé el grupo de dominios heredados, pude modificar la tabla con éxito. Tenga en cuenta que ambos grupos tenían "sa" privilegios.

El comportamiento fue que los comandos alter producirían éxito, pero nada cambió en la mesa. Luego, cuando intenté manualmente cambiar los campos a través del diseñador, me quejé de que no se me permitía hacer cambios si se requería descartar y volver a crear la tabla. Encontré la configuración en las herramientas y pude apagarlo. Pero esta mesa es enorme y no es una buena idea hacer esto. Yo aconsejaría a otros en contra de eso.

así que fue un problema de permiso. No puedo explicar cómo, pero espero que ayude a alguien más


0
2017-12-13 16:35



Otra forma de hacerlo sin dejar caer totalmente la mesa es

  1. Haga una copia de seguridad de los valores de la columna.
  2. Haga que la columna sea nulable si aún no permite valores nulos. Establezca los valores de columna para que sean nulos obra

    update tablename set columnname = null 
    
  3. Eliminar la columna
  4. Inserte una nueva columna con el mismo nombre que la columna eliminada y el tipo que desea
  5. Inserta los datos guardados en esta columna

0
2018-06-21 10:24