Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Alter Table

Estas en el tema de Alter Table en el foro de SQL Server en Foros del Web. Hola, tengo una duda importante con respecto al comando alter table de sql server. Lo que quiero saber es si puedo, mediando algun comando, agregar ...
  #1 (permalink)  
Antiguo 26/10/2009, 05:13
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 4 meses
Puntos: 3
Alter Table

Hola, tengo una duda importante con respecto al comando alter table de sql server.

Lo que quiero saber es si puedo, mediando algun comando, agregar una columna en una posición especifica de una tabla, es decir, después de la columna 10 digamos.

Se que en mysql se puede y vi que en el editor de tablas del ssms se puede, pero... por lo que veo lo que hace es:
- pasar los datos a una tabla temporal,
- borrar la tabla,
- hacerla de nuevo con los cambios y
- poner los datos.
Para mi, de esta forma es imposible utilizar esta funcionalidad, dada la cantidad de tiempo que demora en tablas con muchos datos

Muchas Gracias!
  #2 (permalink)  
Antiguo 26/10/2009, 10:17
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Alter Table

SQL Server no maneja el posicionamiento de sus columnas, aunque de poder, se puede, vaya a su consola de administracion, edite su tabla, en la columna donde quiera INSERTAR una nueva columna, presiones la tecla "insert", teclee los nuevos de la columan en cuestion, en la parte superior (menu de iconos), hay uno donde le permite ver el codigo T-SQL que se ejecutar para hacer dicha tarea.

En pocas palabras.

1.- Hara una copia de la tabla original (datos)
2.- Drop a la tabla actual
3.- Create de la tabla, con la modificacion
4.- Recuperacion de los datos del respaldo
5.- Commit a la transaccion.
  #3 (permalink)  
Antiguo 27/10/2009, 10:08
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 4 meses
Puntos: 3
Respuesta: Alter Table

Cita:
Iniciado por iislas Ver Mensaje
SQL Server no maneja el posicionamiento de sus columnas, aunque de poder, se puede, vaya a su consola de administracion, edite su tabla, en la columna donde quiera INSERTAR una nueva columna, presiones la tecla "insert", teclee los nuevos de la columan en cuestion, en la parte superior (menu de iconos), hay uno donde le permite ver el codigo T-SQL que se ejecutar para hacer dicha tarea.

En pocas palabras.

1.- Hara una copia de la tabla original (datos)
2.- Drop a la tabla actual
3.- Create de la tabla, con la modificacion
4.- Recuperacion de los datos del respaldo
5.- Commit a la transaccion.
Gracias por la respuesta.

Justamente lo que me decís fue lo que probé. Tenes que tener en cuenta que una tabla con muchos datos, va a demorar mucho en realizar esta tarea. Es un proceso muy costoso.
La idea era hacerlo por TSQL ya que al tener muchos motores a los cuales se le deben aplicar los mismos cambios, la idea era un proceso instalador hacer los cambios necesarios comparando la estructura correcta con la actual del motor.

No me convence para nada el método que utiliza SQL Server.
De igual manera tengo que buscar una solución a este inconveniente

Muchas Gracias!
  #4 (permalink)  
Antiguo 27/10/2009, 11:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Alter Table

Por eso mi comentario: SQL Server no maneja el posicionamiento de sus columnas

Es algo que es irrelevante para este motor (y deberia decir, para todos los motores de bases de datos)
  #5 (permalink)  
Antiguo 27/10/2009, 12:04
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 4 meses
Puntos: 3
Respuesta: Alter Table

Cita:
Iniciado por iislas Ver Mensaje
Por eso mi comentario: SQL Server no maneja el posicionamiento de sus columnas

Es algo que es irrelevante para este motor (y deberia decir, para todos los motores de bases de datos)
Entendí lo que me escribiste y te agradezco. Lo que pasa es que estaba buscando algo como lo que hay en mysql.
En la sentencia alter table, cuando añadis una columna de deja setear después de que columna se va a crear esta nueva.

No tengo idea que hace mysql internamente para crear la columna en esa posición. No probé, como si lo hice con sql server, el agregar una columna en una tabla con muchos datos y ve si demora tanto como en sql server.

Nuevamente, gracias por responder!

AGREGADO: Leyendo un poco me di cuenta que mysql hace lo mismo que sql server (que son los pasos que mencionaste arriba)
Gracias!
  #6 (permalink)  
Antiguo 27/10/2009, 13:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Alter Table

Que version de sql server estas manejando ?

Que programa cliente tienes para administrar tu BD ?

¿Tienes el Microsoft SQL server Management Studio Express?

si es asi entra desde este programa cliente entras a tu bd busca tu tabla a editar luego le das click derecho y le das en modificar... ahy creas tu campo nuevo o editas los que tienes yo probe cambiando de orden las columnas dando click presionado y rotando a la pocision donde quiero que este el campo guarde y me guardo bien los cambios.

Esto fue en SQL server 2005

dale haber si te resulta
  #7 (permalink)  
Antiguo 27/10/2009, 13:53
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 4 meses
Puntos: 3
Respuesta: Alter Table

Cita:
Iniciado por eibanez Ver Mensaje
Que version de sql server estas manejando ?

Que programa cliente tienes para administrar tu BD ?

¿Tienes el Microsoft SQL server Management Studio Express?

si es asi entra desde este programa cliente entras a tu bd busca tu tabla a editar luego le das click derecho y le das en modificar... ahy creas tu campo nuevo o editas los que tienes yo probe cambiando de orden las columnas dando click presionado y rotando a la pocision donde quiero que este el campo guarde y me guardo bien los cambios.

Esto fue en SQL server 2005

dale haber si te resulta
Estoy usando sql server 2008

Es como vos decís, utilizando el ssms.
El problema en si no es cambiar de lugar una columna, que como vos bien me decís es muy fácil de hacer.
El problema es que como se dijo antes, sql server y otros motores copian los datos de la tabla a una temporal y rehacen la tabla con las modificaciones.
Esto es muy costoso en tiempo cuando tenes millones de datos en las tablas.

Otro punto es que no me sirve hacerlo desde un programa manejador de base de datos como el ssms ya que tenemos varias bases de datos iguales en cliente que usan nuestro sistema y queremos que sea lo mas transparente posible para ellos. Por eso queríamos hacer estos cambios en un proceso instalador con t-sql.

gracias!
  #8 (permalink)  
Antiguo 27/10/2009, 14:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Alter Table

Perdon que insista, ¿Para que hacer eso?

No tendria caso entonces poder seleccionar las columnas en tu select

SELECT col20, col1, col18, col2

O bien, hacer esto

SELECT COL1, COL2, COL128, COL20

Por eso insisto, para TODOS los manejadores, creo yo, seria IRRELEVANTE la posicion de la columna.
  #9 (permalink)  
Antiguo 27/10/2009, 14:28
Avatar de gustavoh10  
Fecha de Ingreso: diciembre-2005
Ubicación: ARGENTINA
Mensajes: 196
Antigüedad: 18 años, 4 meses
Puntos: 3
Respuesta: Alter Table

Cita:
Iniciado por iislas Ver Mensaje
Perdon que insista, ¿Para que hacer eso?

No tendria caso entonces poder seleccionar las columnas en tu select

SELECT col20, col1, col18, col2

O bien, hacer esto

SELECT COL1, COL2, COL128, COL20

Por eso insisto, para TODOS los manejadores, creo yo, seria IRRELEVANTE la posicion de la columna.
jeje entiendo perfectamente lo que me decís.
es verdad lo que decis que es irrelevante la posicion de la columna, pero en ciertos casos, cuando tenes tablas con muchos campos es mas facil acomodarlos de forma que te sea facil encontrarlos. (es solo para mantener un orden en las tablas)

De todas formas voy a avanzar con agregar las columnas al final de la tabla y luego ver la forma de moverlas.

otra consulta:
Tenes idea si sqlserver da la posibilidad de seguir utilizando la tabla mientras realizar el proceso que me explicaste en el post #2
1.- Hara una copia de la tabla original (datos)
2.- Drop a la tabla actual
3.- Create de la tabla, con la modificacion
4.- Recuperacion de los datos del respaldo
5.- Commit a la transaccion.

Los usuarios podrán seguir haciendo inserts/update/select/delete en esta tabla mientras se realizar el proceso. Creo que solo la podrán leer
  #10 (permalink)  
Antiguo 27/10/2009, 15:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Alter Table

No, se pude utilizar en ese lapso.

Lo que puedes hacer es, crear una nueva tabla, con tus columnas "ACOMODADAS" u "ORDENADAS" y despues recuperar tus datos de tu tabla "fuente" ( en ese momento, que no esten ocupando los datos).

Dar un drop a tu tabla original y renombrar la nueva tabla.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:15.