POSICION DE COLUMNA

17/08/2005 - 00:27 por Mauricio | Informe spam
Buenas tardes grupo.

Quisiera saber si hay alguna manera de cambiar la posición de una columna de
una tabla sin tener que vaciar los datos a una tabla temporal, borrar la
tabla original, crearla con la nueva estructura y regresar los datos
nuevamente.

Muchas gracias por anticipado.

Mauricio

Preguntas similare

Leer las respuestas

#6 Mauricio
17/08/2005 - 02:06 | Informe spam
Claro, lo que pasa es que no puedo hacerlo manualmente, debe ser mendiante
un script, y necesito que la tabla quede con las columnas un determinadas
posiciones.

Y es que esta tabla es manejada para (insert, update, delete y consulta) por
una aplicacion, es por eso de la importancia de las posiciones de las
columnas, de lo contrario mandaría un error a la hora de insertar un dato,
la aplicacion trataría de insertar los datos en posiciones incorrectas.

Y es que al agregar una columna con "ALTER TABLE" la pone al final, pero
luego la quiero dejar en una de las posiciones intermedias ¿como le haría,
es lo que no he podido?

Gracias...

Mauricio

"Juan Ant." wrote in message
news:
Mauricio, puedes hacerlo con el Administrador Corporativo: en la
ventana de diseño de la tabla, basta con arrastrar el campo a la
posición que quieras, haciendo click en el margen izquierdo de la
fila.

Alejandro, ¿no crees que en ocasiones es bastante más claro el orden
de los campos de una tabla, de una forma determinada? Está claro que
el rendimiento es el mismo, y que en una select pondrás los campos en
el orden que quieras, pero a la hora de ver la estructura de una tabla
y entender lo que almacena, a mí me parece bastante importante.

Saludos
Respuesta Responder a este mensaje
#7 Mauricio
17/08/2005 - 02:14 | Informe spam
Muchas gracias Roberto.

Ya se pudo, solo me dio el problema de que no estaba activa la casilla que
indica que se pueden modificar las tablas del sistema, pero ya la activé y
yo pude hacerlo.

Gracias de nuevo, saludos a todos...

"news.microsoft.com" wrote in message
news:
Mauricio:

Bueno, te paso los datos generales y vos despues hacete un procedimiento
almacenado que los utilice como mas te convenga.

Lo primero que tenes que hacer es lo siguiente:

Select ID from sysobjects where name = 'TABLA'

En este caso TABLA es el nombre de la tabla de la cual vos queres
obtener el orden de las columnas.

A continuacion ejecutas con el ID recientemente averiguado el siguiente
select:

Select Name, ColOrder from syscolumns where id= IDAVERIGUADO

Donde IDAVERIGUADO es el ID previamente obtenido con el select sobre
SYSOBJECTS.

A partir de aca ya tenes el orden de cada campo de la tabla que
necesites
en su correspondiente orden... solo resta hacer un update sobre esta tabla
para poner el orden que vos quieras a los campos...

Espero que te sea util, y sobre todo espero tus comentarios...

Saludos.

Alvarez Arigós Roberto Miguel
Analista Superior de Sistemas
"Mauricio" escribió en el mensaje
news:%23IAz%
Buenas tardes grupo.

Quisiera saber si hay alguna manera de cambiar la posición de una columna


de
una tabla sin tener que vaciar los datos a una tabla temporal, borrar la
tabla original, crearla con la nueva estructura y regresar los datos
nuevamente.

Muchas gracias por anticipado.

Mauricio






Respuesta Responder a este mensaje
#8 Mauricio
17/08/2005 - 02:22 | Informe spam
Pues si, tienes razón con lo del diseño, pero no puedo combiar eso por
ahora.

Gracias por tu atención...

Mauricio

"Maxi" wrote in message
news:
Hola, coincido con Alejandro, porque no puedes agregarlo al final? cuando
alguien pregunta por posiciones de columnas detras de ello hay en la
mayoria de los casos un diseño incorrecto


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Mauricio" escribió en el mensaje
news:
No, lo que pasa es que necesito hacer un programa que detecte las
diferencias de una tabla en la base de datos y me deje la tabla con una
estructura previamente definida.

Es decir el programa va a detectar si la tabla tiene una determinada
columna, y si no, la va a agregar pero la debe dejar en una cierta
posición que no siempre sería la última.

Gracias por tu atención.

Mauricio

"Alejandro Mesa" wrote in
message news:
Mauricio,

Cual es el motivo detras de este cambio?

No me digas que es por estetica. Para sql server eso es transparente, no
ayudaras a mejorar el rendimiento de la bd haciendo esto.


AMB

"Mauricio" wrote:

Buenas tardes grupo.

Quisiera saber si hay alguna manera de cambiar la posición de una
columna de
una tabla sin tener que vaciar los datos a una tabla temporal, borrar
la
tabla original, crearla con la nueva estructura y regresar los datos
nuevamente.

Muchas gracias por anticipado.

Mauricio













Respuesta Responder a este mensaje
#9 Alejandro Mesa
17/08/2005 - 04:23 | Informe spam
Ese valor (ColOrder) no representa la posicion u orden de la columna en la
tabla (fijate que en los libros en linea dice que esta columna es para uso
interno), es el numero consecutivo que le toco a la columna a la hora de ser
agregada a la tabla.

create table dbo.t1 (
c1 int,
c2 int,
c3 int,
c4 int,
c5 int
)
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

alter table dbo.t1
drop column c4
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

alter table dbo.t1
add c4 int
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

drop table dbo.t1
go

Como puedes ver, una vez que se elimino la columna c4, la columna c5 siguio
teniendo el mismo valor de ordinal_position, pero sin embargo en la tabla
solo quedan cuatro columnas. Cuando agregamos la columna c4 nuevamente, esta
pasa a tener valor 6 en su ordinal_position (valor tomado de la columna
ColOrder en la tabla syscolumns) y sin embargo la tabla tiene solamente 5
columnas.

SQL Server mantiene unas cuantas tablas de sistema, usadas para su trbajo
interno, y muchas de las mismas estan relacionadas. Sabes tu si este valor
debe ser actualizado en otras tablas de sistema ademas de syscolumns?


AMB

"news.microsoft.com" wrote:

Mauricio:

Bueno, te paso los datos generales y vos despues hacete un procedimiento
almacenado que los utilice como mas te convenga.

Lo primero que tenes que hacer es lo siguiente:

Select ID from sysobjects where name = 'TABLA'

En este caso TABLA es el nombre de la tabla de la cual vos queres
obtener el orden de las columnas.

A continuacion ejecutas con el ID recientemente averiguado el siguiente
select:

Select Name, ColOrder from syscolumns where id= IDAVERIGUADO

Donde IDAVERIGUADO es el ID previamente obtenido con el select sobre
SYSOBJECTS.

A partir de aca ya tenes el orden de cada campo de la tabla que necesites
en su correspondiente orden... solo resta hacer un update sobre esta tabla
para poner el orden que vos quieras a los campos...

Espero que te sea util, y sobre todo espero tus comentarios...

Saludos.

Alvarez Arigós Roberto Miguel
Analista Superior de Sistemas
"Mauricio" escribió en el mensaje
news:%23IAz%
> Buenas tardes grupo.
>
> Quisiera saber si hay alguna manera de cambiar la posición de una columna
de
> una tabla sin tener que vaciar los datos a una tabla temporal, borrar la
> tabla original, crearla con la nueva estructura y regresar los datos
> nuevamente.
>
> Muchas gracias por anticipado.
>
> Mauricio
>
>



Respuesta Responder a este mensaje
#10 news.microsoft.com
17/08/2005 - 23:59 | Informe spam
Alejandro:

Es totalmente Cierto lo que decis de que al eliminar un campo el valor de
ColOrder se pierde, tampoco me imagino al SQL server averiguando
internamente que campo borraste para asignar el numero que falta a la
columna añadida porque justamente perderia el orden de la columna y en tu
caso la columna añadida quedaria entre medio de las eliminadas, lo cual echa
por la borda el concepto de orden de este campo.

Sinceramente no se a que te referis con el "fijate que esa columna es para
uso interno", eso ya lo se, y el proposito segun mi logica porque no lo dice
ningun libro es mantener el orden en el que el usuario va creando las
columnas, este numero es autoincremental y cada vez que creas una columna
asigna un id nuevo en el campo COLORDER. Esto sirve perfectamente para lo
que quiere hacer Mauricio que es en base a un nombre de campo fijarse si
sigue estando en su orden correcto a la hora de hacer un insert o un update,
dado que no importa el momento en que consulte la tabla siempre le va a dar
el orden en que fueron creados los campos de la misma. Si borra un campo y
lo crea de nuevo por sentencia SQL es logico que se crea al final, ahora, si
luego con el administrador corporativo lo moves de lugar el colorder cambia.

En cuanto a tu pregunta, desconozco que haya otro lugar donde se informe
esto.

Espero me entiendas.

Saludos,

Roberto

"Alejandro Mesa" escribió en el
mensaje news:
Ese valor (ColOrder) no representa la posicion u orden de la columna en la
tabla (fijate que en los libros en linea dice que esta columna es para uso
interno), es el numero consecutivo que le toco a la columna a la hora de


ser
agregada a la tabla.

create table dbo.t1 (
c1 int,
c2 int,
c3 int,
c4 int,
c5 int
)
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

alter table dbo.t1
drop column c4
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

alter table dbo.t1
add c4 int
go

select
ordinal_position,
column_name
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
order by
ordinal_position
go

drop table dbo.t1
go

Como puedes ver, una vez que se elimino la columna c4, la columna c5


siguio
teniendo el mismo valor de ordinal_position, pero sin embargo en la tabla
solo quedan cuatro columnas. Cuando agregamos la columna c4 nuevamente,


esta
pasa a tener valor 6 en su ordinal_position (valor tomado de la columna
ColOrder en la tabla syscolumns) y sin embargo la tabla tiene solamente 5
columnas.

SQL Server mantiene unas cuantas tablas de sistema, usadas para su trbajo
interno, y muchas de las mismas estan relacionadas. Sabes tu si este valor
debe ser actualizado en otras tablas de sistema ademas de syscolumns?


AMB

"news.microsoft.com" wrote:

> Mauricio:
>
> Bueno, te paso los datos generales y vos despues hacete un


procedimiento
> almacenado que los utilice como mas te convenga.
>
> Lo primero que tenes que hacer es lo siguiente:
>
> Select ID from sysobjects where name = 'TABLA'
>
> En este caso TABLA es el nombre de la tabla de la cual vos queres
> obtener el orden de las columnas.
>
> A continuacion ejecutas con el ID recientemente averiguado el


siguiente
> select:
>
> Select Name, ColOrder from syscolumns where id= IDAVERIGUADO
>
> Donde IDAVERIGUADO es el ID previamente obtenido con el select sobre
> SYSOBJECTS.
>
> A partir de aca ya tenes el orden de cada campo de la tabla que


necesites
> en su correspondiente orden... solo resta hacer un update sobre esta


tabla
> para poner el orden que vos quieras a los campos...
>
> Espero que te sea util, y sobre todo espero tus comentarios...
>
> Saludos.
>
> Alvarez Arigós Roberto Miguel
> Analista Superior de Sistemas
> "Mauricio" escribió en el mensaje
> news:%23IAz%
> > Buenas tardes grupo.
> >
> > Quisiera saber si hay alguna manera de cambiar la posición de una


columna
> de
> > una tabla sin tener que vaciar los datos a una tabla temporal, borrar


la
> > tabla original, crearla con la nueva estructura y regresar los datos
> > nuevamente.
> >
> > Muchas gracias por anticipado.
> >
> > Mauricio
> >
> >
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida