Generar tablas a partir de sus especificaciones

Muchas gracias de antemano por la respuesta ofrecida.
Tengo una tabla en una BD que solo tiene 3 columnas: Origen, Columna y TipoDato... Origen se refiere al nombre de una BD cualquiera, columna es el nombre de una columna de la base de datos origen y tipodato es el tipo de dato de la columna en referencia.
Podría ayudarme a generar las tablas con un procedimiento almacenado a partir de la tabla que le indico.

1 respuesta

Respuesta
1
No entiendo bien ya que en ningún momento indicas el nombre de la tabla, asumiré que origen contiene tanto el nombre de la tabla como de la base de datos, si lo que asumo no es lo correcto puedes modificar la consulta para ajustarlo a tu escenario, te envío la consulta que crea tu tabla de datos y luego el procedimiento para crear tablas, ojo que yo uso una base de datos llamada migraciones, suerte:
Create table tabla
(
Origen varchar(50),
columna varchar(50),
tipo varchar(50)
)
insert into tabla values ('migraciones..tabla1', 'dato1', 'varchar(50)')
insert into tabla values ('migraciones..tabla1', 'dato2', 'varchar(50)')
insert into tabla values ('migraciones..tabla1', 'dato3', 'varchar(50)')
insert into tabla values ('migraciones..tabla2', 'dato1', 'varchar(50)')
insert into tabla values ('migraciones..tabla2', 'dato2', 'varchar(50)')
insert into tabla values ('migraciones..tabla2', 'dato3', 'varchar(50)')
go
create procedure usp_cargatable
as
Declare @origen varchar(50), @columna varchar(50), @tipo varchar(50), @tmp varchar(50), @counter int
declare @qry nvarchar(150)
set @counter= 1
declare rs_var cursor for
select origen, columna, tipo
from tabla
order by 1
open rs_var
set @tmp= @origen
fetch next from rs_var into @origen, @columna, @tipo
while @@fetch_status=0
begin
if @tmp= @origen
begin
if @counter= 1
begin
set @qry= 'create table '+ @origen+ '('+ @columna+ ' '+ @tipo+ ')'
exec sp_executesql @qry
end
else
begin
set @qry= 'alter table '+ @origen+ ' add '+ @columna+ ' '+ @tipo
exec sp_executesql @qry
end
set @counter= @counter+ 1
end
else
begin
set @qry= 'create table '+ @origen+ '('+ @columna+ ' '+ @tipo+ ')'
exec sp_executesql @qry
set @counter= 2
set @tmp= @origen
end
set @counter= @counter+ 1
fetch next from rs_var into @origen, @columna, @tipo
end
close rs_var
deallocate rs_var

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas