2009-04-28 12 views
10

Estoy usando Visual Studio 2008 para diseñar una base de datos de SQL Server Compact Edition (* .sdf). Tuve que cambiar el esquema de una de mis tablas agregando una nueva columna.¿Cómo cambiar el orden de las columnas en un esquema de tabla de SQL Server Compact Edition?

Quiero "mover" esa nueva columna desde la parte inferior a una posición diferente en la lista de campos. ¿Cómo puedo hacer esto en el diseñador de Visual Studio?

EDIT: Sé que desde un punto de vista puramente técnico, el orden de las columnas no importa. Estoy creando prototipos de una aplicación, así que tengo que cambiar el esquema un par de veces. Si, por ejemplo, tengo que cambiar la clave principal, sería "feo" tener la columna más importante al final. Creo que otros desarrolladores que miran el código se sentirán confundidos. Es una cuestión de estética.

Respuesta

5

no puede simplemente moverlo en el diseñador. Tendrá que crear una nueva columna, descartar la anterior, generar la secuencia de comandos y editar la secuencia de comandos donde se inserta en la tabla temporal de la tabla anterior, haciendo que el valor de la columna anterior (en la selección) vaya a la nueva columna.

+0

Gracias por la respuesta. ¿Cómo puedo escribir una tabla en VS? No encontré esa opción. – splattne

+0

Estoy usando SQL Server Management Studio, por lo que es un poco diferente (no tengo VS). Tengo la barra de herramientas "Diseñador de tablas" que se muestra, y hago clic en el icono que se parece a un desplazamiento con un disquete, y luego copio/pego el texto de la ventana que aparece. Asegúrese de cancelar la operación, para que los cambios no se ejecuten. –

+0

Debo estar ciego. No puedo encontrar la barra de herramientas. ¿Estás seguro de que usaste una base de datos SQL Server Compact? – splattne

2

Estoy de acuerdo con Pax. Si, por una razón específica, necesita devolver los campos en un orden específico en su consulta, simplemente modifique la consulta poniendo el campo en el lugar donde lo necesita.

Si, por cualquier razón, es necesario a toda costa para mover ese campo, puede hacerlo con un script como el siguiente, que hace field3 la primera columna de una tabla llamada TestTable:

/* Original sample table with three fields */ 
CREATE TABLE [dbo].[TestTable](
    [FIELD1] [nchar](10) NULL, 
    [FIELD2] [nchar](10) NULL, 
    [FIELD3] [nchar](10) NULL 
) ON [PRIMARY] 

/* The following script will make FIELD3 the first column */ 
CREATE TABLE dbo.Tmp_TestTable 
    (
    FIELD3 nchar(10) NULL, 
    FIELD1 nchar(10) NULL, 
    FIELD2 nchar(10) NULL 
    ) ON [PRIMARY] 
GO 
IF EXISTS(SELECT * FROM dbo.TestTable) 
    EXEC('INSERT INTO dbo.Tmp_TestTable (FIELD3, FIELD1, FIELD2) 
     SELECT FIELD3, FIELD1, FIELD2 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)') 
GO 

DROP TABLE dbo.TestTable 
GO 

EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO 

Sin embargo, insisto en que probablemente su problema podría resolverse con un enfoque diferente que no requiere una tabla de reestructuración.

+1

Es solo mi retención anal. ;-) No puedo ver una tabla con una columna que es la más importante al final ... – splattne

+0

Ok, espero que mi sugerencia pueda ser de ayuda.:) – Diego

+1

asegúrate de copiar todos los demás elementos de la tabla: index, fk, check constraints, etc ... –

0

siga estos pasos:

  1. quitar todas las claves externas y clave primaria de la tabla original
  2. Cambiar nombre de la tabla original
  3. Usando CTAS crear la tabla original en el orden que desee
  4. gota la mesa vieja
  5. Aplicar todas las restricciones a la tabla original
Cuestiones relacionadas