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

Preguntas similare

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




Respuesta Responder a este mensaje
#2 Juan Carlos
03/02/2006 - 15:59 | Informe spam
Mira no entiendo muy bien tu query pero lo que deseas es crear las tablas
como temporales, si es asi deberias de crearlas con create table y no
declare table, bueno eso creo no??

Saludos

"Jorge Aguilar" escribió en el mensaje
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




Respuesta Responder a este mensaje
#3 Jorge Aguilar
03/02/2006 - 16:05 | Informe spam
Asi es me sale mensaje de error!!

Salu2
Jorge
"Gustavo Larriera [MVP]" escribió en el mensaje
news:
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
>
>
>
>


Respuesta Responder a este mensaje
#4 EL COMPI
03/02/2006 - 20:15 | Informe spam
PORQUE UTILIZAS ESE TIPO DE TABLAS TEMPORALES (@TABLA)
UTILIZA MEJOR LOS TRADICIONALES TABLAS TEMPORALES(#TABLA)

ESO ES LO MAS SENCILLO
SALUDOS


"Juan Carlos" wrote:

Mira no entiendo muy bien tu query pero lo que deseas es crear las tablas
como temporales, si es asi deberias de crearlas con create table y no
declare table, bueno eso creo no??

Saludos

"Jorge Aguilar" escribió en el mensaje
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
>
>
>
>



Respuesta Responder a este mensaje
#5 Gustavo Larriera [MVP]
03/02/2006 - 23:53 | Informe spam
Y cuál es el texto del 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:Ok$
Asi es me sale mensaje de error!!

Salu2
Jorge
"Gustavo Larriera [MVP]" escribió en el mensaje
news:
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
>
>
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida