tablas - ordenar columnas de una tabla en sql server
¿Por qué no puedo reordenar mis columnas de SQL Server? (6)
Lo que quiero saber es cómo ... quiero decir, puedo eliminar una columna ... ¿no es lo mismo que agregar una nueva?
Eliminar una columna se basa en el nombre de la columna, no en la posición ordinal (columna primera / segunda / tercera / etc). Agregar una columna siempre se agrega al final de la lista de columnas. Esto refuerza que la secuencia de columnas es completamente irrelevante para los datos además de las operaciones de SQL. Tampoco sé cómo te ves como similar ...
No hay bases de datos SQL que conozco que admiten la inserción de columnas en un orden particular en una tabla existente. PHPMyAdmin proporcionó la funcionalidad, pero bajo las coberturas, la función está creando una nueva tabla con el orden de columnas deseado, copiando los datos de la tabla antigua a la nueva, y finalmente eliminando / eliminando la tabla anterior.
El orden de la columna no proporciona ningún beneficio para las operaciones ...
Tengo una mesa vieja con FKs en ella. Quiero añadir una nueva columna. Querré hacer de esta nueva columna mi clave principal. Así que pensé que podía insertar esa columna como la primera o insertarla al final de mi tabla y reordenar mis columnas después.
Pero SQL Server Management Studio no me permitió hacer eso. Entiendo que no puedo hacer eso, y que el orden de las columnas es casi completamente irrelevante en SQL.
Lo que quiero saber es cómo ... quiero decir, puedo eliminar una columna ... ¿no es lo mismo que agregar una nueva?
Solo estoy tratando de entender lo que está pasando. También me ha costado mucho encontrar documentación para eso. Si alguien me puede apuntar en la buena dirección.
¡NO quiere hacer eso a menos que la tabla no tenga datos y NO esté en producción! El motivo es que tiene que llevar los registros existentes a una tabla temporal, eliminar la tabla anterior, cambiar el nombre de la tabla temporal. Esto es algo muy malo para hacer con una tabla existente en producción. De todos modos, es estúpido confiar en el orden de las columnas en las consultas, así que esta es una tarea completamente innecesaria. Esto es algo que puede causar un gran dolor, literalmente, sin ganancia. No vaya por este camino, incluso si encuentra una solución.
Quizás te interesen las respuestas a esta pregunta .
En cuanto a por qué no puede reordenar las columnas (aparte de las respuestas específicas de SSMS publicadas), no estoy seguro de que encuentre una respuesta canónica, aparte de que el estándar SQL no contiene una sintaxis programática para hacerlo, la única forma de hacerlo redefinir el esquema de una tabla (incluido el orden de sus columnas) es dejar la tabla y volver a crearla. Por lo tanto, cualquier aplicación de administración que proporcione la "reordenación" de la columna probablemente lo hará entre bambalinas (por ejemplo, la Vista de diseño de SSMS, como se señala en la pregunta vinculada).
Alguien con un conocimiento más profundo de la especificación SQL podría contradecir esto si hay una razón explícita para no proporcionar un mecanismo de reordenación de columnas como parte del DDL estándar, pero solo puedo conjeturar que, ya que las consultas definen el orden de las columnas en sus conjuntos de resultados. y los DBMS controlan el almacenamiento físico de acuerdo con su implementación individual, el orden lógico de las columnas carece esencialmente de sentido y no garantiza tal mecanismo.
Reordenar las columnas es básicamente lo mismo que rehacer la tabla, que es la solución si los cambios que requieren recreación están deshabilitados:
SELECT (fields in DESIRED order)
INTO MyNewTable
FROM OldTable
Si mi sospecha es correcta, tiene una configuración activada que necesita desactivar para permitir que los cambios que requieren la recreación de una tabla se guarden.
Abra SQL Management Studio y use el menú para ir a Herramientas-> Opciones
En el menú de opciones a la izquierda, seleccione Diseñadores.
En el panel Opciones de tabla a la derecha, asegúrese de que la casilla de verificación junto a la configuración "Evitar guardar los cambios que requieren la recreación de la tabla" no esté marcada.
Una vez que haya confirmado que está hecho, intente volver a ordenar las columnas.