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

¿Puedo crear tabla temporal con campos flexibles?

Estas en el tema de ¿Puedo crear tabla temporal con campos flexibles? en el foro de SQL Server en Foros del Web. Hola, mi consulta es la siguiente. Se quieren implementar tablas paramétricas, es decir En una tabla Estructura tengo el campo (NombreTabla,NombreCampo,Etiqueta) en la cual tendremos ...
  #1 (permalink)  
Antiguo 02/09/2008, 16:03
 
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 4 meses
Puntos: 0
Información ¿Puedo crear tabla temporal con campos flexibles?

Hola, mi consulta es la siguiente.

Se quieren implementar tablas paramétricas, es decir

En una tabla Estructura tengo el campo (NombreTabla,NombreCampo,Etiqueta)

en la cual tendremos

Registro1:
Nombretabla: Bancos
NombreCAmpo: a
Etiqueta : Codigo

Registro2:
NombreTAbla : Bancos
Nombrecampo: b
Etiqueta: Descripcion

Las estructuras de las tablas pueden ser creadas por el usuario y a su vez existe la tabla que lleva los registros de esas tablas con los campos (NombreTabla,Registro,NombreCampo,Dato)

Donde:
Registro 1
NombreTabla: Bancos
Registro : 1
NombreCampo: a
Dato: 100

REgistro 2
NombreTabla : Bancos
Registro : 1
NombreCampo : b
Dato : "Banco X"

Esto es muy comodo para el usuario pues por programas pueden crear ellos mismos su estructura. Lo complejo es para leerlas, ya que necesito primero recorrer la tabla Estructura para ver con cuantos campos cuenta mi tabla parametrica. Y luego con un cursor leer los datos y mostrarlos.

Mi pregunta es, para llenar la tabla temporal donde llenaré la info, ¿como puedo hacer lo suficientemente parametrico para crearla y si tiene 4 campos, hacer un Create table con 4 campos, y si tiene 10 campos, hacer lo mismo??. Se podría crear un campo con Alter Table #tmp (campo (x) varchar(255)) por ejemplo?, dentro de un While?.

Saludos.
  #2 (permalink)  
Antiguo 02/09/2008, 17:41
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: ¿Puedo crear tabla temporal con campos flexibles?

Claro que se puede. Yo administro un sistema que hace lo mismo.
El usuario tiene la opcion de crear estructuras, las cuales llena desde diferentes medios, el mas usado, Excel.
Pienso que no necesitas la segunda tabla, solo una donde guardes la estructura de cada tabla. En base a esta estructura formaras el query que te permitira crear la tabla.
Te paso parte del script donde se crea dinamicamente una tabla:
Cita:
declare cur_defstructtable cursor for
select dat_gr_campo
,dat_gr_tipo_campo
,dat_gr_largo_campo
,dat_gr_orden
,dat_gr_es_rut
,dat_gr_es_nombre
from tb_estructura_grupo
where tgrupo_codigo = @tgrupo_codigo
order by dat_gr_orden
for read only
-- nota : abrimos el cursor para formar la estructura
open cur_defstructtable
fetch next from cur_defstructtable into @cur_dat_gr_campo
,@cur_dat_gr_tipo_campo
,@cur_dat_gr_largo_campo
,@cur_dat_gr_orden
,@cur_dat_gr_es_rut
,@cur_dat_gr_es_nombre
while @@fetch_status = 0
begin
if @cur_dat_gr_es_rut = 's'
begin
select @positionofid = @cur_dat_gr_orden
select @positionofid = @cur_dat_gr_orden
select @fieldkeyname = @cur_dat_gr_campo
end
select @counterrow = @counterrow + 1
select @strsqlstruct = @strsqlstruct + ' [' + @cur_dat_gr_campo + ']'
select @strsqlstruct = @strsqlstruct + ' ' + @cur_dat_gr_tipo_campo
if @cur_dat_gr_largo_campo is not null select @strsqlstruct = @strsqlstruct + '(' + convert(varchar,@cur_dat_gr_largo_campo) + ')'
if @counterrow != @totalrowstruct select @strsqlstruct = @strsqlstruct + ',' + char(13)
else select @strsqlstruct = @strsqlstruct + char(13)
fetch next from cur_defstructtable into @cur_dat_gr_campo
,@cur_dat_gr_tipo_campo
,@cur_dat_gr_largo_campo
,@cur_dat_gr_orden
,@cur_dat_gr_es_rut
,@cur_dat_gr_es_nombre
end
close cur_defstructtable
Espero que te ayude.
Suerte!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:32.