Query con Declare Table

03/02/2006 - 14:53 por Jorge Aguilar | Informe spam
Hola a todos tengo que hacer copias de tablas, y declarlo en tablas
temporales, las tablas las creo, pero no puedo hacer un select , les envio
tambien el query porque no descubro porque no funciona.
Ahora es necesario que se haga con declare table que es mas rapido que con
create table #tabla

Gracias,
Jorge

declare @pIDX int
sysobjects, solo contiene nombre de tablas.
declare @vtablas varchar(32),
@vcolumna varchar(100),
@vsentencia varchar(8000),
@vsql varchar(8000),
@idtabla int
set @pIDX = 12
select @vtablas= tblrep_nombre from tablas_replicar where
tblrep_indice=@pIDX
set @vsentencia =''
set @vcolumna=''
declare cursor_tabla cursor for
select ta.id, co.name+' '+td.name +''+
case td.name when 'bit' then ''
when 'char' then '('+cast(co.length as varchar(3))+')'
when 'datetime' then ''
when 'decimal' then '('+cast(co.xprec as varchar(3))+','+cast(co.xscale
as varchar(2))+')'
when 'int' then '('+cast(co.length as varchar(3))+')'
when 'tinyint' then '('+cast(co.length as varchar(3))+')'
when 'varchar' then '('+cast(co.length as varchar(3))+')' end +','
from syscolumns co
inner join sysobjects ta on ta.id=co.id and ta.name in (select
tblrep_nombre from TABLAS_REPLICAR)
inner join systypes td on co.xtype=td.xtype
WHERE ta.name =@vtablas
order by co.colorder
open cursor_tabla
fetch next from cursor_tabla into @idtabla, @vcolumna
while @@fetch_status = 0
begin
set @vsentencia = @vsentencia+char(13)+@vcolumna
fetch next from cursor_tabla into @idtabla, @vcolumna
end
close cursor_tabla
deallocate cursor_tabla

set @vsentencia = 'declare @a'+@vtablas+' table
('+left(@vsentencia,len(@vsentencia)-1)+')'
set @vsql ='select * from @a'+@vtablas
 

Leer las respuestas

#1 Gustavo Larriera [MVP]
03/02/2006 - 15:54 | Informe spam
Cuando dices "no funciona" a qué te refieres?

Simplemente no hace nada o tienes un mensaje de error?

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Jorge Aguilar" wrote in message
news:%23$
Hola a todos tengo que hacer copias de tablas, y declarlo en tablas
temporales, las tablas las creo, pero no puedo hacer un select , les
envio
tambien el query porque no descubro porque no funciona.
Ahora es necesario que se haga con declare table que es mas rapido que con
create table #tabla

Gracias,
Jorge

declare @pIDX int
sysobjects, solo contiene nombre de tablas.
declare @vtablas varchar(32),
@vcolumna varchar(100),
@vsentencia varchar(8000),
@vsql varchar(8000),
@idtabla int
set @pIDX = 12
select @vtablas= tblrep_nombre from tablas_replicar where
tblrep_indice=@pIDX
set @vsentencia =''
set @vcolumna=''
declare cursor_tabla cursor for
select ta.id, co.name+' '+td.name +''+
case td.name when 'bit' then ''
when 'char' then '('+cast(co.length as varchar(3))+')'
when 'datetime' then ''
when 'decimal' then '('+cast(co.xprec as varchar(3))+','+cast(co.xscale
as varchar(2))+')'
when 'int' then '('+cast(co.length as varchar(3))+')'
when 'tinyint' then '('+cast(co.length as varchar(3))+')'
when 'varchar' then '('+cast(co.length as varchar(3))+')' end +','
from syscolumns co
inner join sysobjects ta on ta.id=co.id and ta.name in (select
tblrep_nombre from TABLAS_REPLICAR)
inner join systypes td on co.xtype=td.xtype
WHERE ta.name =@vtablas
order by co.colorder
open cursor_tabla
fetch next from cursor_tabla into @idtabla, @vcolumna
while @@fetch_status = 0
begin
set @vsentencia = @vsentencia+char(13)+@vcolumna
fetch next from cursor_tabla into @idtabla, @vcolumna
end
close cursor_tabla
deallocate cursor_tabla

set @vsentencia = 'declare @a'+@vtablas+' table
('+left(@vsentencia,len(@vsentencia)-1)+')'
set @vsql ='select * from @a'+@vtablas




Preguntas similares