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

Listar los nombres de las columnas de una tabla

Estas en el tema de Listar los nombres de las columnas de una tabla en el foro de SQL Server en Foros del Web. Hola amigos, bueno tengo el siguiente problema necesito listar los nombres de las columnas de una tabla, segun la query que tengo estaria bien la ...
  #1 (permalink)  
Antiguo 06/07/2010, 18:52
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Listar los nombres de las columnas de una tabla

Hola amigos, bueno tengo el siguiente problema

necesito listar los nombres de las columnas de una tabla, segun la query que tengo estaria bien la sentencia, sin enbargo, solo me coloca el nombre de la columna a listar pero sin datos;

esta es mi query:

Cita:
select column_name
from informattion.schema.columns
where table_name = 'MyTabla'
Estoy usando SQL Server 2005, y el ejemplo lo saque de alli, sin embargo no lista nada, pero tampoco me genera errores.

Hubiese tenido que crear la tabla de algun modo especial, para que pueda salir esto?


De antemano muchas gracias, he avanzado mucho en mi proyecto gracias a este foro

Saludos
  #2 (permalink)  
Antiguo 06/07/2010, 22:20
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Listar los nombres de las columnas de una tabla

No entiendo, si quieres listar los DATOS, debes hacer esto:

SELECT * FROM TuTabla --- Donde, TuTabla, es el nombre de la tabla en cuestion
  #3 (permalink)  
Antiguo 07/07/2010, 00:49
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Listar los nombres de las columnas de una tabla

Hola, no amigo mio, lo que necesito es listar los nombres de las columnas de las tablas:

ejemplo

Tabla: Datos
Id nombre edad
-------------------
1 Jose 27
2 maria 15

Esta query

Cita:
select column_name
from information.schema.columns
where table_name = 'Datos'
se supone que esta query deberia hacer eso, y aparecerme asi

Cita:
column_name
-------------------
id
nombre
datos
sin embargo, solo me aparece el nombre de la columna pero sin datos.

Cita:
column_name
-------------------


¿que podria estar mal?
  #4 (permalink)  
Antiguo 07/07/2010, 01:30
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Listar los nombres de las columnas de una tabla

Hola amigos, ya encontre la solucion, por si alguien mas le sirve

lo mas probable es que exista alguna formula mas facil y rapida, pero yo lo hice asi:

1.- se hace un:
Cita:
select name, object_id from sys.columns
esto permite identificar cual es el ID de la tabla a listar (se daran cuenta por que todos los campos de la tabla que se necesita tendra el mismo Id), en donde:
name: es el nombre de la columna
object_id: es el Id de la tabla
sys.columns: guarda el ID de todas las columnas de la base de datos

2.- en mi caso, para la tabla "Datos" (que esta en el ejemplo mas arriba), el ID que arrojo es mas o menos asi: 1755159822, entonces, para consultar los nombres de la columna de la tabla "Datos" se hace un select condicionandolo al object_id. Es decir:
Cita:
select name from sys.columns where object_id = 1755159822
y esto me genera el siguiente listado:
Cita:
name
-------------------
id
nombre
datos
Espero le sirva a alguien por ahi

Saludos
  #5 (permalink)  
Antiguo 07/07/2010, 14:56
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Listar los nombres de las columnas de una tabla

Bueno, me has ganado a dar una repuesta, aunque hay algo mejor que podrías hacer:

SELECT c.name
FROM sys.columns c JOIN sys.tables t
ON c.object_id = t.object_id
WHERE t.name = 'Datos'
  #6 (permalink)  
Antiguo 07/07/2010, 16:59
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Listar los nombres de las columnas de una tabla

Gracias iislas, efectivamente, como tu dices, es mas facil y de una sola vez, la solucion que tu me das, ya la aplique funciona perfecto.

El problema que tengo, que no se aun como solucionarlo:

Tengo una Tabla:"Pagos"

Cita:
Id Rut Sueldo Hrs Extras Bonos
-----------------------------------------
1 14-1 27000 5000 8500
2 14-1 16900 0 13000
3 17-9 47000 1500 0
4 19-6 21890 0 0
Cita:
Otra tabla:"Codigo_Pagos"
-----------------------------------------
IdPago Nombre
1 Sueldo
2 Hrs Extras
3 Bonos
4 Aguinaldo
5 Gratificacion
Y otra Tabla: "Detalle_Pagos"

Cita:
Id IdPago Monto
-----------------------------------------
0 0 0
Necesito LLenar la tabla "Detalle_Pagos" para que quede de la siguiente manera:

Cita:
Idcodpago IdPago Monto
-----------------------------------------
1 1 27000
1 2 16900
1 3 47000
1 4 21890
2 1 5000
2 2 0
2 3 1500
2 4 0
3 1 8500
3 2 13000
3 3 0
3 4 0

Y pues, no se como hacerlo, intento comparar el nombre de la columna con la tabla de "Codigo_Pago", me selecciona de modo correcta, solo los registros de la tabla "Codigo_Pagos" que se estan ocupando en la tabla "Pagos", lo que no puedo hacer es tomar los valores de dicha columna, la unica solucion que veo es con un cursor, Uds me han dicho que hay que evitarlos, pero no se me ocurre nada. Alguna idea amigos mios?

De antemano Muchas Gracias

Estare atento a sus comentarios

Saludos
  #7 (permalink)  
Antiguo 07/07/2010, 17:51
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Listar los nombres de las columnas de una tabla

¿Que campos hacen tu PK en Pagos?
  #8 (permalink)  
Antiguo 07/07/2010, 22:02
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Listar los nombres de las columnas de una tabla

El Id, es Identity, por que esa tabla se llena desde un Archivo de texto con un BULK INSERT.
  #9 (permalink)  
Antiguo 07/07/2010, 22:06
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Listar los nombres de las columnas de una tabla

¿Y rut?, lo que trato de identificar, es porque concepto de PAGOS, se hace la SUMATORIA
  #10 (permalink)  
Antiguo 07/07/2010, 22:14
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Listar los nombres de las columnas de una tabla

Rut es solo un dato mas, por q puede venir en mas de una oportunidad en la tabla "Pagos", es por esto, que le agregue un Id, para identificar cada registro como unico.

rut: al id de otra tabla ("personal") esa tabla identifica solo al trabajador
nombre: el nombre de cada trabajador
y desde la columna sueldo en adelante son todos los pagos q puede percibir cada uno.
  #11 (permalink)  
Antiguo 07/07/2010, 23:45
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Listar los nombres de las columnas de una tabla

Vamonos por la mas facil, dime si esto es lo que buscas:

SELECT 1, ID, [Sueldo] AS Monto FROM PAGOS
UNION
SELECT 2, ID, [Hrs Extras] as Monto FROM PAGOS
UNION
SELECT 3, ID, [Bonos] as Monto FROM PAGOS
UNION
SELECT 4, ID, [Aguinaldo] as Monto FROM PAGOS
UNION
SELECT 5, ID, [Gratificacion] as Monto FROM PAGOS
  #12 (permalink)  
Antiguo 08/07/2010, 11:18
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Listar los nombres de las columnas de una tabla

Excelente, muchas gracias, muy buena tu solucion, yo no sabia como ocupar el UNION,

Ahora te la pongo mas dificil para ver si se puede hacer esto:

1.- Tengo un archivo plano que debo cargar mensualmente a la base de datos "remuneraciones", entonces tengo una temporal, con la misma estructura del archivo plano

Tabla:"Pagos_Mensuales_Temp"

Cita:
Rut Nombre corr Mes Año Sueldo Hrs Extras Bonos
-----------------------------------------------------------------
14-1 Jose 1 06 2010 27000 5000 8500
14-1 Jose 2 06 2010 16900 0 13000
17-9 Miguel 1 06 2010 47000 1500 0
19-6 Juan 1 06 2010 21890 0 0
2.- De esta tabla temporal, debo llenar la tabla "Personal"

Tabla: "Personal"

Cita:
Rut Nombre
----------------------------------------------------------------
14-1 Jose
17-9 Miguel
19-6 Juan
3.- Luego traspaso los datos desde la tabla Temporal a una tabla historica, esta tabla genera un Id Identity para cada uno de los registros insertados

Tabla: "Pagos_Historicos"

Cita:
Id Rut corr Mes Año
-----------------------------------------------------------------
1 14-1 1 06 2010
2 14-1 2 06 2010
3 17-9 1 06 2010
4 19-6 1 06 2010
Y es de aqui donde se me presentaba el problema que me soluciono iislas, pero con un inconveniente que se me presento ahora. y de la cual no me habia dado cuenta:

Cita:
Tengo la tabla:"Codigo_Pagos"
-----------------------------------------
IdPago Nombre
1 Sueldo
2 Hrs Extras
3 Bonos
el problema es que el ID que debo consultar es por ID de la Tabla Historica para poder llenar el detalles de los pagos, en la Tabla: "Detalle_Pagos"

Cita:
IdHist IdPago Monto
-----------------------------------------
0 0 0
y Necesito LLenar la tabla "Detalle_Pagos" para que quede de la siguiente manera:

Cita:
IdHist IdPago Monto
-----------------------------------------
1 1 27000
1 2 16900
1 3 47000
1 4 21890
2 1 5000
2 2 0
2 3 1500
2 4 0
3 1 8500
3 2 13000
3 3 0
3 4 0
Como no hay relacion alguna entre el Historico y el codigo a pagos, lo que hago es concatenar (solo como consulta) de la tabla Temporal los campos Rut, Corr, Mes y Año quedando asi:

Cita:
Nuevo_ID_Temporal
-----------------------------------------------------------------
14-11062010
14-12062010
17-91062010
19-61062010
y en la Tabla Historico Hago lo mismo

Cita:
Nuevo_ID_Historico
-----------------------------------------------------------------
14-11062010
14-12062010
17-91062010
19-61062010
entonces lo del UNION es una muy buena solucion, pero como se puede tambien unir la tabla historica, y sacar ese ID, si solo tengo para comparar 2 cadenas de caracteres entre si, y q mas encima estan hechas en Consultas (Select).?


Se puede hacer eso?

o debo hacer otra tabla temporal para agregarle el ID faltante al temporar y hacer los UNION que me enseño iislas??

Muchas Gracias y atento a sus comentarios

Saludos

Etiquetas: columnas, listar, nombres, tablas
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:07.