Efectos negativos de "Evitar guardar cambios que requieran volver a crear la tabla"
Preámbulo
Hoy estaba modificando una columna en SQL Server 2008, cambiando el tipo de datos de algo así como moneda (18,0) a (19,2).
Recibí el error "Los cambios que ha realizado requieren que las siguientes tablas se eliminen y se vuelvan a crear" desde SQL Server.
Antes de apresurarse a responder, lea lo siguiente:
Ya sé que existe la opción en Herramientas ► Opciones ► Diseñador ► Diseñadores de tablas y bases de datos ► Desmarque la casilla "Evitar guardar cambios que requieran la recreación de la tabla". ... ¡así que no respondas con eso!
Pregunta real
Mi pregunta real es para otra cosa, la siguiente:
¿Existen efectos negativos o posibles inconvenientes al hacer esto?
¿La tabla realmente se elimina y se vuelve a crear automáticamente cuando esta casilla no está marcada?
Si es así, ¿la copia de la tabla es una réplica 100% exacta de la tabla fuente?
Herramientas --> Opciones --> Nodo Diseñadores --> Desmarque " Evitar guardar cambios que requieran recreación de la tabla ".
La tabla solo se elimina y se vuelve a crear en los casos en que esa es la única forma en que se ha programado Management Studio de SQL Server para saber cómo hacerlo.
Ciertamente, hay casos en los que lo hará cuando no es necesario, pero también habrá casos en los que las ediciones que realice en Management Studio no se eliminarán ni se volverán a crear porque no es necesario.
El problema es que enumerar todos los casos y determinar de qué lado de la línea caen será bastante tedioso.
Es por eso que me gusta usar ALTER TABLE
en una ventana de consulta, en lugar de diseñadores visuales que ocultan lo que están haciendo (y, francamente, tienen errores): sé exactamente lo que va a suceder y puedo prepararme para los casos en los que la única posibilidad es eliminar y volver a crear la tabla (que es un número menor que la frecuencia con la que SSMS le hará eso).
¿Existen efectos negativos o posibles inconvenientes al hacer esto?
Seguro. Si puede programar el cambio usted mismo sin reconstruir toda la tabla, es mejor: considere el caso en el que la tabla tiene 10 TB y la base de datos está muy registrada (piense en sincronización AG, seguimiento de cambios, replicación, activadores mal escritos) y la tabla tiene un gran acceso: esa es una receta potencial para el desastre. Si su cambio es algo en lo que puede aplicar una sugerencia EN LÍNEA o agregar una columna y copiar los datos en lotes en lugar de todo o nada que hará la GUI, esto es mejor.
¿La tabla realmente se elimina y se vuelve a crear automáticamente cuando esta casilla no está marcada?
Que podría . Existe una larga lista de escenarios y el resultado depende de la versión de SSMS, la versión de SQL Server y, a veces, la edición. Puede verificar marcando la casilla e intentando aplicar el cambio en una copia sin sentido de la base de datos primero , pero usar scripts ALTER TABLE reales en lugar de la GUI de apuntar y hacer clic es el camino a seguir en mi humilde opinión.
Si es así, ¿la copia de la tabla es una réplica 100% exacta de la tabla fuente?
Sí, si SSMS tiene que reconstruir la tabla, será una réplica 100% exacta una vez finalizada (excepto por el cambio de rumbo), pero eso podría ser el próximo miércoles. El proceso crea una nueva versión de la tabla, copia todos los datos en ella, luego elimina la tabla anterior y cambia el nombre de la nueva.
Referencia : desactivar esta opción puede ayudarle a evitar volver a crear una tabla y también puede provocar que se pierdan los cambios. Por ejemplo, suponga que habilita la función Seguimiento de cambios en SQL Server 2008 para realizar un seguimiento de los cambios en la tabla. Cuando realiza una operación que hace que se vuelva a crear la tabla, recibe el mensaje de error que se menciona en la sección "Síntomas". Sin embargo, si desactiva esta opción, la información de seguimiento de cambios existente se elimina cuando se vuelve a crear la tabla. Por lo tanto, Microsoft recomienda que no solucione este problema desactivando la opción.