¿Cómo cambiar el orden de las columnas en una tabla usando una consulta SQL en SQL Server 2005?
Quiero reorganizar el orden de las columnas en una tabla usando una consulta SQL.
¿Cómo cambiar el orden de las columnas en una tabla usando una consulta SQL en SQL Server 2005?
Quiero reorganizar el orden de las columnas en una tabla usando una consulta SQL.
Respuestas:
No puedes. El orden de las columnas es solo una cosa "cosmética" que nos importa a los humanos; para SQL Server, casi siempre es absolutamente irrelevante.
Lo que hace SQL Server Management Studio en segundo plano cuando cambia el orden de las columnas allí es recrear la tabla desde cero con un nuevo CREATE TABLE
comando, copiar los datos de la tabla anterior y luego soltarlos.
No hay ningún comando SQL para definir el orden de las columnas.
INSERT
sin especificar explícitamente tus columnas de todos modos!
Debe enumerar explícitamente los campos en el orden en que desea que se devuelvan en lugar de usar * para el orden 'predeterminado'.
consulta original:
select * from foobar
devoluciones
foo bar
--- ---
1 2
ahora escribe
select bar, foo from foobar
bar foo
--- ---
2 1
según http://msdn.microsoft.com/en-us/library/aa337556.aspx
Esta tarea no es compatible con instrucciones Transact-SQL.
Bueno, se puede hacer usando create
/ copy / drop
/ renombrar, como respondió komma8.komma1
O puede usar SQL Server Management Studio
- En el Explorador de objetos , haga clic con el botón derecho en la tabla con las columnas que desea reordenar y haga clic en Diseño (Modificar en la versión 2005 SP1 o anterior)
- Seleccione la casilla a la izquierda del nombre de la columna que desea reordenar. (Puede seleccionar varias columnas manteniendo presionadas las teclas [shift] o [ctrl] en su teclado).
- Arrastre la (s) columna (s) a otra ubicación dentro de la tabla.
Luego haga clic en guardar. Este método en realidad elimina y recrea la tabla, por lo que pueden ocurrir algunos errores.
Si la opción Seguimiento de cambios está habilitada para la base de datos y la tabla, no debe utilizar este método.
Si está deshabilitada, la opción Evitar guardar cambios que requieren la recreación de la tabla debe borrarse en el menú Herramientas> Opciones> Diseñadores; de lo contrario, se producirá el error "No se permiten guardar cambios" .
También pueden surgir problemas durante la creación de claves primarias y externas.
Si se produce alguno de los errores anteriores, el guardado falla, lo que lo deja con el orden de columna original.
This task cannot be performed using Transact-SQL statements.
" en el documento era incorrecta. Le expliqué al autor y le pedí que lo cambiara por " This task is not supported using Transact-SQL statements.
". Hace aproximadamente un día, el autor estuvo de acuerdo y se arregló el documento. Puedes seguir la discusión que tuvimos en GitHub .
Esto es similar a la pregunta sobre ordenar los registros en el resultado de una consulta ... y normalmente a nadie le gusta la respuesta formalmente correcta ;-)
Así que aquí va:
select *
no obliga a que las columnas se devuelvan en un orden particularcreate table' or in the
tabla de modificación agregar `declaracionesPor supuesto, puede cambiar el orden de las columnas en una declaración SQL. Sin embargo, si desea abstraer el orden de las columnas físicas de las tablas, puede crear una vista. es decir
CREATE TABLE myTable(
a int NULL,
b varchar(50) NULL,
c datetime NULL
);
CREATE VIEW vw_myTable
AS
SELECT c, a, b
FROM myTable;
select * from myTable;
a b c
- - -
select * from vw_myTable
c a b
- - -
En SQLServer Management Studio:
Herramientas -> Opciones -> Diseñadores -> Diseñadores de tablas y bases de datos
Luego:
SQLServer Management studio eliminará la tabla y la volverá a crear utilizando los datos.
Puede hacerlo creando una nueva tabla, copiando todos los datos, eliminando la tabla anterior y luego cambiando el nombre de la nueva para reemplazar la anterior.
También puede agregar nuevas columnas a la tabla, copiar los datos columna por columna, eliminar las columnas antiguas y luego cambiar el nombre de las columnas nuevas para que coincidan con las antiguas. Un ejemplo simple a continuación: http://sqlfiddle.com/#!3/67af4/1
CREATE TABLE TestTable (
Column1 INT,
Column2 VARCHAR(255)
);
GO
insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO
select * from TestTable;
GO
ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO
update TestTable
set Column1_NEW = Column1,
Column2_NEW = Column2;
GO
ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO
sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO
select * from TestTable;
GO
En SQLServer Management Studio:
Tools
-> Options
-> Designers
->Table and Database Designers
Deseleccionar Prevent saving changes that require table re-creation
.
Ahora puedes reordenar la mesa.
El servidor SQL crea internamente el script. Crea una tabla temporal con nuevos cambios y copia los datos y suelta la tabla actual y luego vuelve a crear la inserción de la tabla desde la tabla temporal. Lo encuentro en la opción "Generate Change script" ssms 2014. Script como este. Desde aquí: Cómo cambiar el orden de las columnas en una tabla usando la consulta SQL
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_emps
(
id int NULL,
ename varchar(20) NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT'
GO
COMMIT
Si su tabla tiene suficientes columnas, puede intentar esto. Primero cree una nueva tabla con el orden preferido de columnas.
create table new as select column1,column2,column3,....columnN from table_name;
Ahora suelte la tabla usando el comando drop
drop table table_name;
ahora cambie el nombre de la tabla recién creada a su nombre de tabla anterior.
rename new to table_name;
ahora seleccione la tabla, tiene sus columnas reorganizadas como prefería antes.
select * from table_name;
Al final del día, simplemente no puede hacer esto en MS SQL. Recientemente creé tablas sobre la marcha (inicio de la aplicación) usando un procedimiento almacenado que lee de una tabla de búsqueda. Cuando creé una vista que los combinaba con otra tabla que había creado manualmente anteriormente (el mismo esquema, con datos), falló, simplemente porque estaba usando '' Seleccionar * UNION Seleccionar * 'para la vista. Al mismo tiempo, si utilizo solo los creados a través del procedimiento almacenado, tengo éxito.
En conclusión: si hay alguna aplicación que depende del orden de las columnas, realmente no es una buena programación y seguramente creará problemas en el futuro. Las columnas deben 'sentirse' libres de estar en cualquier lugar y usarse para cualquier proceso de datos (INSERT, UPDATE, SELECT).
Puedes lograrlo con estos pasos:
elimine todas las claves externas y la clave principal de la tabla original.
cambiar el nombre de la tabla original.
usando CTAS cree la tabla original en el orden que desee.
deja caer la vieja mesa.
aplicar todas las restricciones a la tabla original
Si las columnas que se van a reordenar se han creado recientemente y están vacías, las columnas se pueden eliminar y volver a agregar en el orden correcto.
Esto me sucedió, extendiendo una base de datos manualmente para agregar nueva funcionalidad, y había perdido una columna, y cuando la agregué, la secuencia era incorrecta.
Después de no encontrar una solución adecuada aquí, simplemente corrigí la tabla usando el siguiente tipo de comandos.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Nota: solo haga esto si no tiene datos en las columnas que está eliminando.
La gente ha dicho que el orden de las columnas no importa. Utilizo regularmente SQL Server Management Studio "generar scripts" para crear una versión de texto del esquema de una base de datos. Para controlar de forma eficaz estas secuencias de comandos (git) y compararlas (WinMerge), es imperativo que la salida de las bases de datos compatibles sea la misma y que las diferencias resaltadas sean diferencias genuinas de la base de datos.
El orden de las columnas sí importa; ¡pero solo para algunas personas, no para todos!
Supongo que desea agregar una nueva columna en una posición específica. Puede crear una nueva columna moviendo las columnas actuales hacia la derecha.
+---+---+---+
| A | B | C |
+---+---+---+
Elimine todos los índices afectados y las referencias de claves externas. Agregue una nueva columna con exactamente el mismo tipo de datos que la última columna y copie los datos allí.
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
Cambie el tipo de datos de la tercera columna al mismo tipo que el de la columna anterior y copie los datos allí.
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
Cambie el nombre de las columnas en consecuencia, vuelva a crear índices eliminados y referencias de claves externas.
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
Cambie el tipo de datos de la segunda columna.
Tenga en cuenta que el orden de las columnas es solo una cosa "cosmética", como dijo marc_s .
Utilizar
SELECT * FROM TABLE1
que muestra el orden predeterminado de las columnas de la tabla.
Si desea cambiar el orden de las columnas.
Especifique el nombre de la columna para mostrar correspondientemente
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
Puede cambiar esto usando una consulta SQL. Aquí está la consulta SQL para cambiar la secuencia de la columna.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
Para tener un orden de columna específico, debe seleccionar columna por columna en el orden que desee. El orden de selección dicta cómo se ordenarán las columnas en la salida.
Prueba este comando:
alter table students modify age int(5) first;
Esto cambiará la posición de edad a la primera posición.
alterar el nombre de la tabla modificar el nombre de la columna int (5) primero; traerá la columna a la primera alterar el nombre de la tabla modificar el nombre de la columna int (5) después de (nombre de la tabla);
Ejemplo: Cambiar la posición de field_priority después de field_price en el estado de la tabla.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;