2010-04-23 30 views
38

¿Es posible cambiar un tipo de columna en una base de datos de SQL Server 2008 de varchar(255) a varchar(MAX) sin tener que soltar la tabla y volver a crear?Varchar (255) a Varchar (MAX)

SQL Server Management Studio me lanza un error cada vez que trato de hacerlo usando eso, pero para ahorrarme un dolor de cabeza sería bueno saber si puedo cambiar el tipo sin tener que DROP y CREATE.

Gracias

+2

Extraño, lo probé en SQL Server 2005, funciona bien para mí. – anonymous

+2

Por cierto, ¿cuál fue el error arrojado? – anonymous

+1

'No se permiten cambios de guardado. Los cambios que ha realizado requieren que se eliminen y vuelvan a crear las siguientes tablas. Ha realizado cambios en una tabla que no se puede volver a crear o habilitó la opción Evitar guardar cambios que requieren que la tabla se vuelva a crear. ' La opción 'Evitar guardar cambios' no está habilitada ... – Darbio

Respuesta

66

Usted debe ser capaz de hacerlo usando TSQL.

Algo así como

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 
+0

esto funcionó. gracias – Darbio

+0

para mí también me ayudó ... gracias –

11

'Cómo guardar los cambios, no está permitido. Los cambios que ha realizado requieren que se eliminen las siguientes tablas y se vuelva a crear . Ha realizado cambios en una tabla que no puede ser recreó o habilitó la opción Evite guardar cambios que requieren la tabla que se volverá a crear. ' Opción 'evitar guardar los cambios' no está permitido ..

Esa es una nueva "característica" en SQL Server Management Studio 2008 que por defecto está activada. Cada vez que realiza un cambio más grande, SSMS solo puede recrear la tabla creando una nueva y luego moviéndose sobre los datos de la anterior, todo en segundo plano (esos cambios incluyen el reordenamiento de sus columnas, entre otras cosas).

Esta opción está desactivada de forma predeterminada, ya que si su tabla tiene restricciones FK y cosas así, esta forma de volver a hacer la tabla podría fallar. ¡Pero definitivamente puedes activar esa función!

alt text http://i42.tinypic.com/19pegj.png

está bajo Tools > Options y una vez que se desactiva la opción que puede hacer este tipo de cambios en la estructura de la tabla en el diseñador de tablas de nuevo.

+0

Gracias marc_s. Ya no tenía esta marca y todavía me impedía realizar los cambios. Las declaraciones de alter por el espectador anterior funcionaron cuando las escribí ellas mismas. Gracias :) – Darbio

+0

@JD: mmm ... extraño ... por lo general ese es el problema, ¡me alegra que ya tengas una solución! –

1

Tenga en cuenta
con algo como

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

Answare de

Martin Smith:

Si usted está aumentando a varchar(100 - 8000) (es decir, que no sea varchar(max)) nada y que está haciendo este a través de TSQL en lugar de la GUI SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
y no altera la anulabilidad de la columna desde NULL a NOT NULL (que bloquearía la tabla mientras todas las filas están validadas y potencialmente escritas en o desde NOT NULL a NULL en algunos casos, este es solo un cambio de metadatos rápido. Es posible que deba esperar un bloqueo SCH-M en la tabla, pero una vez que admita que el cambio será prácticamente instantáneo. Una advertencia que debe tenerse en cuenta es que, durante la espera de un bloqueo SCH-M, se bloquearán otras consultas en lugar de saltarse la cola, por lo que le recomendamos que agregue primero un SET LOCK_TIMEOUT. También asegúrese de que en la declaración ALTER TABLE especifique explícitamente NOT NULL si ese es el estado original de la columna, de lo contrario la columna se cambiará para permitir NULL.

+0

¿No es esto idéntico a [esta respuesta existente] (http://stackoverflow.com/a/2696003/1402846)? – Pang

+1

¿Por qué es un problema ALTERAR a varchar (MAX)? – Chris

Cuestiones relacionadas