2011-01-19 17 views

Respuesta

18

ALTER no lo hará porque el orden de la columna no importa para el almacenamiento o la consulta de

Si SQL Server, se tendría que utilizar el Diseñador de SSMS tabla para organizar sus columnas, que a su vez puede generar una script que cae y vuelve a crear la tabla

Editar Jun 2013

Cruz enlace a mi respuesta aquí: Performance/Space implications when ordering SQL Server columns?

+7

El pedido de columna ** sí importa ** cuando se trata de una inserción masiva. –

+3

Solo si no lo usa, digamos un archivo de formato – gbn

+0

Gracias. Me ahorró perder más tiempo tratando de descubrir cómo hacer que el producto MS SQL haga esto. – noogrub

21

MySQL:

ALTER TABLE mytable 
ADD COLUMN new_column <type> 
AFTER  existing_column 

MsSQL (que yo sepa) no le permiten modificar la tabla y agregar una columna después de una columna específica. Su mejor opción es utilizar Sql Server Management Studio, o jugar con dejar caer y volver a agregar la tabla, o crear una nueva tabla y mover los datos manualmente. ninguno es muy elegante.

6

Es posible.

Primero, simplemente agregue cada columna de la manera habitual (como la última columna).

En segundo lugar, en SQL Server Management Studio Ingrese a Herramientas => Opciones.

En la pestaña 'Diseñadores' => 'Menú de diseñadores de tablas y bases de datos', desmarque la opción 'Evitar guardar cambios que requieran recreación de tablas'.

A continuación, haga clic derecho en su tabla y elija 'Diseño'. En el modo 'Diseño' simplemente arrastre las columnas para ordenarlas.

No olvides guardar.

+8

OP solicitó una consulta SQL para hacerlo. Su sugerencia es usar Management Studio. – AaA

+1

+1 Esto me ayudó a hacerlo al apagar el Opción "Evitar guardar". Por lo tanto, no es necesario realizar consultas (lo cual no es posible de todos modos). – kajaco

1

Primero agregue la nueva columna a la tabla anterior a través de SSMStudio. Ir a la base de datos >> tabla >> columnas. Haga clic con el botón derecho en las columnas y elija nueva columna. Sigue al asistente. A continuación, crear la nueva tabla con las columnas ordenadas según se desee de la siguiente manera:

select * into my_new_table from (
select old_col1, my_new_col, old_col2, old_col3 
from my_old_table 
) as A 
; 

cambie el nombre de las tablas según se desee a través SSMStudio. Ir a la base de datos >> tabla >> elegir renombrar.

0

Es una mala idea seleccionar * de cualquier cosa, punto. Es por eso que SSMS agrega todos los nombres de campo, incluso si hay cientos, en lugar de seleccionar *. Es extremadamente ineficiente independientemente de lo grande que sea la tabla. Si no sabe cuáles son los campos, es aún más eficiente sacarlos de la base de datos INFORMATION_SCHEMA de lo que es seleccionar *.

Una consulta mejor sería:

SELECT 
COLUMN_NAME, 
Case 
    When DATA_TYPE In ('varchar', 'char', 'nchar', 'nvarchar', 'binary') 
    Then convert(varchar(MAX), CHARACTER_MAXIMUM_LENGTH) 
    When DATA_TYPE In ('numeric', 'int', 'smallint', 'bigint', 'tinyint') 
    Then convert(varchar(MAX), NUMERIC_PRECISION) 
    When DATA_TYPE = 'bit' 
    Then convert(varchar(MAX), 1) 
    When DATA_TYPE IN ('decimal', 'float') 
    Then convert(varchar(MAX), Concat(Concat(NUMERIC_PRECISION, ', '), NUMERIC_SCALE)) 
    When DATA_TYPE IN ('date', 'datetime', 'smalldatetime', 'time', 'timestamp') 
    Then '' 
End As DATALEN, 
DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
Where 
TABLE_NAME = '' 
Cuestiones relacionadas