Este es para generar el string de creación de una tabla ya existente...
Como ???
Pues, si tengo una tabla en mi DB que se llama Albaranes y en un procedimientos por un motivo X, necesito hacer una tabla temporal con su misma estructura, podemos hacerlo facilmente con este procedimiento que me retorna el string de creación de la tabla, pero de forma temporal #
Código:
CREATE PROCEDURE crea_tabla
@tabla varchar(50),
@tabli varchar(50)
AS
Declare @id int, @campo varchar(200), @tipo varchar(100), @tamano int, @collation bit, @sql varchar(5000)
Declare @Temporal Table (campo varchar(200), tipo varchar(100), tamano int, collation bit, orden int)
select @id=id from sysobjects (nolock) where name=@tabla
insert into @Temporal
select sc.name, sy.name, sc.length, 1, sc.colid from syscolumns sc (nolock)
inner join systypes sy (nolock) on
sc.xtype=sy.xtype and sc.id=@id and sc.collation is null
insert into @Temporal
select sc.name, sy.name, sc.length, 0, sc.colid from syscolumns sc (nolock)
inner join systypes sy (nolock) on
sc.xtype=sy.xtype and sc.id=@id and sc.collation is not null
set @sql='Create Table #'+@tabli+' ('
While exists(select top 1 * from @Temporal)
Begin
select top 1 @campo=campo, @tipo=tipo, @tamano=tamano, @collation=collation
from @Temporal order by orden
if @collation=0
set @sql=@sql+@campo+' '+@tipo+'('+cast(@tamano as varchar)+'), '
else
set @sql=@sql+@campo+' '+@tipo+', '
delete @Temporal where campo=@campo
End
set @sql=substring(@sql,1,len(@sql)-1)+')'
select @sql
GO
Entonces, ejecutando algo como:
Código:
crea_tabla 'Original', 'Copia'
Recibo del procedimiento algo asi:
Código:
Create Table #Copia (Cod_Producto varchar(50), Cod_proveedor int,
Cod_Fam_Pro int, Nombre_Producto varchar(100), Descrip_Producto varchar(200)
, Fec_Alta datetime, Estado bit, Cod_EAN varchar(20),
Cod_Pro_proveedor varchar(20), cod_proveedor0 int, cod_producto0 varchar(50)
, tipo varchar(50), filler varchar(100), gramos int, unidades float,
coste_material float, coste_produccion float, iva float)
Bue, espero les sirva de algo... jejeje