Guardar cambios después de editar la tabla en SQL Server Management Studio

265

Si deseo guardar cualquier cambio en una tabla, previamente guardada en SQL Server Management Studio (sin datos en la tabla presente), recibo un mensaje de error:

Guardar cambios no está permitido. Los cambios que ha realizado requieren que las siguientes tablas se descarten y se vuelvan a crear. Ha realizado cambios en una tabla que no se puede volver a crear o ha habilitado la opción Evitar guardar cambios que requieren que se vuelva a crear la tabla.

¿Qué puede evitar que la tabla se edite fácilmente? ¿O es la forma habitual para que SQL Server Management Studio requiera volver a crear la tabla para editarla? ¿Qué es? ¿Esta "opción Evitar guardar cambios" ?

movimiento rápido del ojo
fuente
1
@Pang - Esta pregunta vino primero, este es el duplicado.
GrandMasterFlush
@Pang - No lo sabía, gracias.
GrandMasterFlush

Respuestas:

573

Vaya a Herramientas -> Opciones -> Diseñadores-> Desmarque "Evitar guardar cambios que requieren la recreación de la tabla". Voila

Eso sucede porque a veces es necesario soltar y volver a crear una tabla para cambiar algo. Esto puede llevar un tiempo, ya que todos los datos deben copiarse en una tabla temporal y luego volver a insertarse en la nueva tabla. Dado que SQL Server por defecto no confía en usted, debe decir "OK, sé lo que estoy haciendo, ahora déjeme hacer mi trabajo".

Pedro
fuente
8
El sitio de soporte de Microsoft desalienta esto, pero si no tiene ningún dato en la tabla, no veo el daño. Probablemente sea mejor usar TSQL para hacer los cambios.
Jon Smock
66
Yo personalmente desalentaría el uso del diseñador para bases de datos importantes. Lo he visto cometer errores costosos en muchas ocasiones. Además, promueve hábitos de desarrollo perezosos y permite a las personas modificar la estructura de la base de datos que pueden no ser lo suficientemente competentes para hacerlo si no pueden administrar la ruta del código SQL.
Mark W Dickson el
55
De acuerdo, Mark, pero en el desarrollo inicial no necesito escribir un montón de guiones.
Kristopher
77
Es sorprendente que sea septiembre de 2016, y este increíble error hostil para el usuario (sin opción de preguntar "Hola, ¿te gustaría PERMITIR cambios en la mesa?") Todavía está en juego. No, solo obtienes un botón Cancelar y tienes que hacer tus cambios nuevamente. SQL Server es muy estúpido.
Mike Gledhill
2
@Mike Gledhill Saludos desde 2019 y este sigue siendo el caso LOL
Capitán Kenpachi
116

Herramientas> Opciones

ingrese la descripción de la imagen aquí

Desmarca la opción anterior

Prasanna
fuente
55
Gracias por la captura de pantalla. Estaba buscando algo como esto para ayudarme a encontrar esa estúpida opción. El cuadro de diálogo debe tener una casilla de verificación para "hacerlo de todos modos" cuando dice que no puede.
Chris Benard
2
La Mejor Práctica Después de cambiar esta opción es comprobar la opción superior 'Auto generar secuencias de comandos de cambio' con el fin de evitar que los datos perder
Dubi
Gracias por la imagen. Es muy útil :)
M A.
72

Para evitar este problema, use instrucciones SQL para realizar los cambios en la estructura de metadatos de una tabla.

Este problema se produce cuando la opción "Evitar guardar cambios que requieren la recreación de la tabla" está habilitada.

Origen: Mensaje de error cuando intenta guardar una tabla en SQL Server 2008: "No se permiten guardar cambios"

Daniel Vassallo
fuente
12
Mi pregunta aquí es: ¿por qué SQL Server no usa las declaraciones T-SQL requeridas en lugar de soltar y volver a crear la tabla para cada cambio? No puedo entender este comportamiento.
Jaime
15

En lugar de desmarcar la casilla (una solución pobre), debe DEJAR de editar datos de esa manera. Si se deben cambiar los datos, hágalo con un script, de modo que pueda portarlos fácilmente a producción y que estén bajo control de origen. Esto también facilita la actualización de los cambios de prueba después de que la producción se haya reducido a desarrollo para permitir que los desarrolladores trabajen en contra de datos más recientes.

HLGEM
fuente
2
A) Puede copiar el script que SSMS genera y usarlo en su entorno de producción. B) SSMS es a menudo más fácil, más rápido y más seguro porque SSMS maneja todos los detalles por usted.
Trispedó
2
Itg sigue siendo una muy mala idea. No desea volver a crear una tabla de registro de 10,000, 000 en prod. No es mas rapido. ¿Cómo es más seguro? Los datos incorrectos son datos incorrectos y las comprobaciones de coherencia funcionan si utiliza una secuencia de comandos que escribió y si deja que SSMS escriba una. Es una práctica POBRE en el 100% de los casos.
HLGEM
14

Muchos cambios que puede realizar de manera muy fácil y visual en el editor de tablas en SQL Server Management Studio requieren que SSMS deje caer la tabla en segundo plano y la vuelva a crear desde cero. Incluso cosas simples como reordenar las columnas no se pueden expresar en la declaración estándar DDL de SQL: todo lo que SSMS puede hacer es soltar y volver a crear la tabla.

Esta operación puede ser a) muy lenta en una tabla grande, o b) incluso puede fallar por varias razones (como restricciones FK y otras cosas). Por lo tanto, SSMS en SQL Server 2008 introdujo esa nueva opción que las otras respuestas ya han identificado.

Puede parecer contradictorio al principio para evitar tales cambios, y ciertamente es una molestia en un servidor de desarrollo. ¡Pero en un servidor de producción, esta opción y su valor predeterminado para evitar tales cambios se convierte en un posible salvavidas!

marc_s
fuente
2
Ahora estoy en un servidor de desarrollo, pero en uno de producción seguramente lo volveré a encender. Gracias una vez más por compartir experiencias
Rem
1
Pero, por ejemplo, cambiar el tamaño de una columna nvarchar de 100 a 120 es una operación muy sencilla que podría hacerse fácilmente con ALTER TABLE ... entonces, ¿por qué SQL Server (Management Studio) está cayendo y volviendo a crear la tabla para tal ¿casos?
Jaime
44
@Jaime: que debes preguntar a los desarrolladores de ese diseñador visual; nadie más lo sabe. Es solo un hecho: con el diseñador visual, siempre se realizarán muchos cambios directos al volver a crear la tabla y copiarla. Si desea utilizar el enfoque directo, depende de usted manejarlo usted mismo escribiendo algunas declaraciones T-SQL fáciles y ejecutándolas.
marc_s
1
Gracias @marc_s Esta es exactamente la respuesta que esperaba, aunque tenía poca fe en que tuvieran una razón oculta que lo explicara todo :)
Jaime
1
Esta restricción también evita que la identificación del objeto cambie sin que usted lo sepa (en caso de que necesite que eso no suceda).
Trispedó