Si agrego una columna a una tabla en Microsoft SQL Server, ¿puedo controlar dónde se muestra la columna de forma lógica en las consultas?
No quiero alterar el diseño físico de las columnas en el disco, pero me gustaría agrupar lógicamente las columnas cuando sea posible para que herramientas como SQL Server Management Studio enumeren el contenido de la tabla de una manera conveniente.
Sé que puedo hacer esto a través de SQL Management Studio entrando en su modo de "diseño" para tablas y arrastrando el orden de las columnas, pero me gustaría poder hacerlo en SQL sin formato para poder realizar el pedido. escrito desde la línea de comandos.
sql-server
llamada rápida
fuente
fuente
Respuestas:
No puede hacer esto programáticamente (de una manera segura) sin crear una nueva tabla.
Lo que hace Enterprise Manager cuando confirma un reordenamiento es crear una nueva tabla, mover los datos y luego eliminar la tabla anterior y cambiar el nombre de la nueva tabla por el nombre existente.
Si desea que sus columnas estén en un orden / agrupación en particular sin alterar su orden físico, puede crear una vista que puede ser la que desee.
fuente
Creo que lo que todos aquí están perdiendo es que, aunque no todos tienen que lidiar con instancias de 10, 20 o 1000 del mismo sistema de software instalado en todo el país y el mundo ... aquellos de nosotros que diseñamos software vendido comercialmente lo hacemos. Como resultado, expandimos los sistemas a lo largo del tiempo, expandimos las tablas agregando campos a medida que se necesita una nueva capacidad y, a medida que esos campos se identifican, pertenecen a una tabla existente y, como tal, más de una década de expansión, crecimiento, adición de campos, etc. a las tablas ... y luego tener que trabajar con esas tablas desde el diseño, hasta el soporte, a veces profundizar en datos brutos / resolución de problemas para depurar nuevos errores de funcionalidad ... es increíblemente agravante no tener la información principal que desea ver dentro del primer puñado de campos,
A menudo he deseado poder hacer esto, por esta misma razón. Pero además de hacer exactamente lo que hace SQL, construir un script de creación para una nueva tabla de la manera que yo quiero, escribir el inserto en él, luego eliminar todas las restricciones, relaciones, claves, índices, etc., etc., existentes, etc. de la tabla existente y renombrar la tabla "nueva" vuelve al nombre anterior, y luego lee todas esas claves, relaciones, índices, etc., etc.
No solo es tedioso, requiere mucho tiempo, sino que ... en cinco años más, tendrá que volver a suceder ...
Está tan cerca de valer la pena esa enorme cantidad de trabajo, sin embargo el punto es ... no será la última vez que necesitemos esta habilidad, ya que nuestros sistemas continuarán creciendo, expandiéndose y obteniendo campos en un orden de locos impulsado por adiciones de necesidad / diseño.
La mayoría de los desarrolladores piensa desde el punto de vista de un solo sistema que sirve a una sola empresa o al mercado de cajas duras muy específico.
Los diseñadores y líderes del desarrollo "listos para usar" pero significativamente progresistas en su espacio de mercado siempre tendrán que lidiar con este problema, una y otra vez ... les encantaría una solución creativa si alguien tiene una. Esto fácilmente podría ahorrarle a mi empresa una docena de horas a la semana, simplemente sin tener que desplazarse o recordar dónde está "ese" campo en la tabla de datos de origen ...
fuente
FieldID Guid
,OrderBy int
. Hecho. Entonces SSMS oSELECT *
usa eso. Apáguelo si es un DBA perfecto y no lo quiere. Muy frustrante. Y ahora mis mesas son lo suficientemente grandes como para no poder usar más la fuerza bruta.Si entiendo su pregunta, desea afectar qué columnas se devuelven primero, segundo, tercero, etc. en las consultas existentes , ¿verdad?
Si todas sus consultas están escritas con
SELECT * FROM TABLE
, se mostrarán en la salida tal como se presentan en SQL.Si sus consultas están escritas con
SELECT Field1, Field2 FROM TABLE
, entonces el orden en que se presentan en SQL no importa.fuente
Cuando Management Studio lo hace, está creando una tabla temporal, copiando todo, eliminando su tabla original y cambiando el nombre de la tabla temporal. No hay una declaración T-SQL equivalente simple.
Si no le apetece hacer eso, ¿siempre puede crear una vista de la tabla con las columnas en el orden que desee y usarla?
Editar: ¡batido!
fuente
Hay una forma, pero es solo temporalmente para la consulta en sí. Por ejemplo,
Digamos que tienes 5 mesas. La tabla se llama
T_Testing
FirstName, LastName, PhoneNumber, Email e Member_ID
desea que muestre su ID, luego Apellido, luego Nombre, luego Teléfono y luego Correo electrónico.
Puede hacerlo según la selección.
Aparte de eso, si solo desea que el apellido se muestre antes del nombre por alguna razón, también puede hacerlo de la siguiente manera:
Lo único que debe asegurarse de hacer es que la función OrderBy o Where debe indicarse como Table.Column si va a utilizar un Where o OrderBy
Ejemplo:
Espero que esto ayude, lo descubrí porque necesitaba hacerlo yo mismo.
fuente
Todo lo que el script realmente hace es crear una segunda tabla con el orden de columna deseado, copia todos sus datos en ella, elimina la tabla original y luego cambia el nombre de la tabla secundaria para que ocupe su lugar. Esto le ahorra escribirlo usted mismo, aunque si desea un script de implementación.
fuente
Se puede hacer usando SQL, modificando las tablas del sistema directamente. Por ejemplo, mira aquí:
Modificar tabla: agregar una nueva columna en el medio
Sin embargo, no recomendaría jugar con tablas del sistema, a menos que sea absolutamente necesario.
fuente
No es posible cambiar el orden de las columnas sin volver a crear la tabla completa. Si solo tiene algunas instancias de la base de datos, puede usar SSMS para esto (seleccione la tabla y haga clic en "diseño").
En caso de que tenga demasiadas instancias para un proceso manual, debe probar este script: https://github.com/Epaminaidos/reorder-columns
fuente