Ver Mensaje Individual
  #3  
Antiguo 17-08-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Reputación: 22
Xianto Va por buen camino
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
__________________
El diseño dira si tiene futuro...
Responder Con Cita