16

¿Por qué recibo el mensaje de que la tabla debe abandonarse y volver a crearse cuando agrego/muevo columnas? Creo que esto sucede después de agregar restricciones de clave externa.SQL Server Management Studio - ¿Agregar/mover columnas requiere colocar y volver a crear?

¿Qué puedo hacer para agregar nuevas columnas sin soltar la tabla?

+6

respetuosamente en desacuerdo con la opinión común de que el orden no importa La legibilidad y la organización siempre importan cuando se programa. Por ejemplo, siempre me gusta mi PK agrupados, no intercalados en una tabla de 50 columnas. Para otro ejemplo, un ofuscador técnicamente no importa para la funcionalidad de un programa, pero (a propósito) hace que el código se convierta en un desastre. IMO el deseo de ordenar sus columnas es completamente natural. – Tekito

Respuesta

21

"Prevent saving changes that require table re-creation"

Si usted está más interesado en conseguir simplemente SSMS para detener persistente, puede desmarcar la opción "Impedir guardar cambios que requieren mesa "Configuración de re-creación en Opciones-> Diseñadores-> Diseñadores de tablas y bases de datos. La (s) tabla (s) se eliminarán y se volverán a crear, pero al menos SSMS no le molestará tanto al respecto.

(Esto supone que está trabajando en un entorno de desarrollo/pruebas o en un entorno de producción en un breve lapso en la existencia de la mesa no arruine a nada)

+1

¡Gracias! Esto debería funcionar por el momento pero un poco peligroso :) – tvr

+1

¡Me alegro de escucharlo! Por cierto, SSMS también moverá sus datos a la nueva tabla. Nunca experimenté pérdida de datos o tuve otros problemas para hacerlo de esta manera. ¡Aunque siempre hago una copia de seguridad primero, por supuesto! –

+0

¡Este es un consejo muy peligroso!Nunca desmarque este campo o puede perder accidentalmente todos sus datos en cambios estructurales. Olvídese de la IU y use TSQL para modificar su tabla como se describe en una de las otras respuestas. – Jan

7

¡Porque así es como lo hace SQL Server Management Studio (a veces)!

Uso de TSQL ALTER TABLE lugar:

ALTER TABLE 
    ADD myCol int NOT NULL 
+0

¿Qué hay de reordenar? :) – tvr

+1

@tvrsubs: el pedido no importa. [Ver esto] (http://en.wikipedia.org/wiki/Obsessive_compulsive_disorder) – gbn

+2

Gracias por el enlace. Sí, soy obsesivo y probablemente deberías ver esto http://www.answers.com/topic/cleanliness-is-next-to- godliness :) – tvr

0

Cuando se edita una definición de tabla en el diseñador, que está diciendo "esto es lo que quiero de la mesa para que parezca, ahora averiguar qué sentencias SQL para emitir para hacer mis deseos se hacen realidad ". Esto funciona bien para cambios simples, pero el software no puede leer tu mente, y algunas veces intentará hacer las cosas de una manera más complicada por seguridad.

Cuando esto sucede, sugiero que, en lugar de simplemente hacer clic en Aceptar, haga clic en el botón "Secuencia de comandos" en la parte superior del cuadro de diálogo y que genere las declaraciones SQL en una ventana de consulta. Luego puede editar y simplificar el código generado antes de ejecutarlo.

+0

Disculpe, ¿dónde puedo encontrar el botón "Guión"? ¿Es lo mismo que el menú "Tabla de scripts como"? – tvr

1

SQL Server (y cualquier otro RDBMS, en realidad) no tiene ninguna noción de "orden de columnas" - p. si mueve las columnas, la única forma de lograr esa nueva estructura de tabla es publicar una nueva declaración CREATE TABLE. No puede ordenar sus columnas de otra manera, ni debería hacerlo, en realidad, ya que en la teoría relacional, el orden de las columnas en una tupla es irrelevante.

Así que lo único SQL Server Management Studio puede hacer (y ha hecho todo lo largo) es:

  • cambiar el nombre de la mesa de edad
  • crear la nueva tabla en la nueva presentación que desea tener
  • copiar los datos a través de la tabla antigua
  • caer la vieja mesa de

la única manera de evitar esto es:

  • no reordenar las columnas - Sólo añadir nuevas columnas al final de su mesa
  • uso ALTER TABLE sentencias SQL en lugar del diseñador mesa interactiva para su trabajo
+4

Mysql no tiene ningún problema con esto ... – tvr

0

Hay errores en SSMS 2008 R2 (o más) que son útiles para saber:

  • cuando se cambia la tabla de datos, ерушк representación en SSMS se autorefreshed por SSMS en sus pestañas ya abiertas (ventanas) - uno shou Presione Ctrl + R para actualizar.Las opciones para forzar la actualización no aparecen en la GUI de SSMS: mediante botones, menús u opciones contextuales (al hacer clic con el botón secundario)
  • cuando se modifica un esquema (de tabla o de base de datos), como agregar/eliminar/eliminar una columna una mesa, SSMS no refleja estos cambios en las pestañas ya abiertas (ventanas), incluso a través de Ctrl + R, se debe cerrar y volver a abrir pestañas (ventanas)

me dicen que hace unos años a través de Microsoft Connect retroalimentación, pero los insectos se cerraron debido a que es "por diseño"

Actualización:
Esto es extraño e irritante de ver en el producto de escritorio desarrollado durante 2 deca des, mientras que esto (autorefreshing) está siendo realizado por la mayoría de webapplications en cualquier navegador

+0

Debo decir que esto tiene sentido ya que esto requiere una sobrecarga adicional (por supuesto, probablemente deberían verificar las marcas de tiempo o algo similar) – tvr

+0

¿Qué tiene sentido? - ¿Ese no es ni automorrefrigerar ni obtener un esquema actualizado al forzar la actualización manual de los metadatos sin cerrar y volver a abrir una ventana? ¿Cuál es el sentido en eso? No es sobrecarga, es decir, no demora, uno no puede obtener la representación gráfica del esquema cambiado (metadatos) en SSMS en absoluto en la ventana ya abierta (antes del cambio) en absoluto en la demora –

Cuestiones relacionadas