una tabla registros ordenar orden ejemplos developer datos consultas complejas columnas cambiar sql-server database-table change-management

sql-server - registros - ordenar columnas de una tabla en sql server



Agregue una nueva columna de tabla a una posición ordinal específica en Microsoft SQL Server (9)

Debe crear una tabla temporal que refleje el esquema de la tabla original pero con el orden de columna que desee, luego copiar el contenido del original en la temperatura. Eliminar el original y cambiar el nombre de la temperatura.

Esto es lo que hace SQL Management Studio detrás de escena.

Con una herramienta de sincronización de esquemas, puede generar estos scripts automáticamente.

¿Es posible agregar una columna a una tabla en una posición ordinal específica en Microsoft SQL Server?

Por ejemplo, nuestras tablas siempre tienen las columnas CreatedOn, CreatedBy, LastModifiedOn, LastModifiedBy en el "final" de cada definición de tabla. Me gustaría que la nueva columna se muestre en SSMS sobre estas columnas.

Si estoy ejecutando todos los cambios en mi base de datos, ¿hay alguna forma de conservar este orden al final de la tabla?

Para su información, no estoy tratando de instituir una guerra de fuego en caso de que esto debería hacerse. Si quieres leer sobre un hilo que degenera rápidamente en eso, aquí hay uno bueno:

http://www.developersdex.com/sql/message.asp?p=581&r=5014513


La respuesta es sí, es técnicamente posible, pero tendrá un dolor de cabeza al hacerlo y le llevará mucho tiempo ejecutarlo y configurarlo.

Uno: Crear / Copiar / Eliminar / Renombrar

Esto es realmente lo que hace SQL Server en la interfaz gráfica: aquí hay un ejemplo del script que genera y ejecuta al hacer clic en el botón ''guardar'' después de agregar una nueva columna al comienzo de una tabla.

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO CREATE TABLE dbo.Tmp_SomeTable ( MyNewColumn int NOT NULL, OriginalIntColumn int NULL, OriginalVarcharColumn varchar(100) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE) GO SET IDENTITY_INSERT dbo.Tmp_SomeTable ON GO IF EXISTS(SELECT * FROM dbo.SomeTable) EXEC(''INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)'') GO SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF GO DROP TABLE dbo.SomeTable GO EXECUTE sp_rename N''dbo.Tmp_SomeTable'', N''SomeTable'', ''OBJECT'' GO GO COMMIT

Dos: AÑADIR COLUMNA / ACTUALIZACIÓN / DESACTIVAR COLUMNA / RENOMBRAR

Básicamente, este método consiste en crear una copia de cualquier columna existente que desee agregar al ''derecho'' de su nueva columna, transferir los datos a la nueva columna, luego quitar los originales y cambiar el nombre de los nuevos. Esto causará estragos en cualquier índice o restricción que tenga, ya que tiene que ubicarlos. Es técnicamente posible, pero nuevamente requiere mucho tiempo tanto en términos de desarrollo como de ejecución.

CREATE TABLE MyTest (a int, b int, d int, e int) INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5) SELECT * FROM MyTest -- your current table ALTER TABLE MyTest ADD c int -- add a new column ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move ALTER TABLE MyTest ADD e_new int UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns ALTER TABLE MyTest DROP COLUMN d -- remove the originals ALTER TABLE MyTest DROP COLUMN e EXEC SP_RENAME ''MyTest.d_new'', ''d''; -- rename the new columns EXEC SP_RENAME ''MyTest.e_new'', ''e''; SELECT * FROM MyTest DROP TABLE MyTest -- clean up the sample

Tres: vivir con eso

Esto ofende gravemente mi sentido del orden ... pero a veces, no vale la pena reorganizarlo.


Lo que creo que es simple es agregar la columna ALTER TABLE table1 ADD ... y luego crear una tabla tmp como tmp_table1 desde la selección como SELECT col1,col2,col5,col3,col4 into tmp_table1 from table1; y luego suelte table1 y cambie el nombre de tmp_table1 a table1, eso es todo. Espero que ayude a alguien


No estoy seguro de si el hilo todavía está activo. Estaba teniendo la misma consulta con la base de datos MySQL. Al hacer clic derecho en la tabla y seleccionar "ALTER", se genera automáticamente el siguiente código. Muestra provista desde sakila db y funcionó. Simplemente busque la columna después de la cual desea colocar su nueva columna y use la palabra clave ''DESPUÉS''

ALTER TABLE `sakila`.`actor` CHANGE COLUMN `middle_name` `middle_name` VARCHAR(50) NULL DEFAULT NULL AFTER `first_name`;


No puede crear una columna en una ubicación ordinal específica en la estructura de la tabla. Además, ¿por qué querría? El orden de las columnas en SQL Server es totalmente irrelevante.

SQL Server Management Studio tiene una vista de diseño que aparentemente le permite crear una columna en cualquier ubicación de la lista de columnas, pero lo que realmente sucede aquí en segundo plano es que la nueva tabla con las nuevas columnas se crea y la anterior se elimina. .

No hay comandos SQL DDL para crear una columna en una ubicación específica o para "reordenar" las columnas. Realmente no es necesario.

Bagazo


Que yo sepa, no hay ningún método conocido para cambiar el orden de la columna. Detrás de escena, SQL Management Studio hace lo que dijo José Basilio. Y si tiene una tabla grande, entonces no es práctico cambiar los pedidos de columna de esta manera.

Puede utilizar una "vista". Con las vistas SQL puede usar cualquier orden que desee sin verse afectado por los cambios en la columna de la tabla.


Sucio y sencillo.
Exportar tabla a csv.
Insertar nuevos datos en la posición deseada.
Mesa plegable.
Crear nueva tabla con las especificaciones de columna deseadas.
Cargar columnas desde csv a la nueva tabla.


Vaya a SQL Server Management Studio y "diseñe" una tabla existente. Inserte una columna en el centro, haga clic derecho en un área vacía y seleccione Generar cambio de script ...

Ahora mira el script que crea. básicamente creará una tabla temporal con el orden de columna adecuado, insertará los datos de la tabla original, eliminará la tabla original y cambiará el nombre de la tabla temporal. Esto es probablemente lo que tendrás que hacer.

Es posible que también deba desmarcar esta opción para permitir la creación de scripts de cambio.


TFS 2013 lo hará por usted automáticamente .

Agregue la (s) nueva (s) columna (s) a la tabla de la forma que desee, y luego confirme los cambios en TFS. Desde allí puede abrir el archivo sql de la tabla en Visual Studio y mover manualmente el orden de las columnas en el script CREATE de T-SQL. Luego, puede actualizar su base de datos de destino utilizando la herramienta de comparación de esquemas de VS que se encuentra en Herramientas> SQL Server> Nueva comparación de esquemas. Elija su proyecto de base de datos con su cambio como fuente y la base de datos que desea actualizar como destino. Compare, seleccione la secuencia de comandos de la tabla y Actualizar. VS se caerá y agregará automáticamente. Todos sus datos estarán seguros, y los índices también.