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

#6 Maxi [MVP]
04/02/2006 - 15:05 | Informe spam
Hola, a ver, estas replicando tablas en memoria? cual es realmente el
objetivo de hacer esto y complicar la cosa asi? no seria mejor hacerte un
Select Into? que estas buscando realmente resolver que quieres aplicar esto


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"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
#7 Maxi [MVP]
04/02/2006 - 15:06 | Informe spam
Hola, ojo con lo que dices, las variables tipo table son mucho mas
eficientes que las tablas temporales, las primeras funcionan sobre la RAM y
las segundas sobre el disco. Ahora, esto no quiere decir siempre usar
variables tipo tabla, pero si la data es razonable entonces son mcuho mejor
que las tablas temporales


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"EL COMPI" <EL escribió en el mensaje
news:
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
#8 Jorge Aguilar
06/02/2006 - 15:24 | Informe spam
Lo que sucede es que necesito replicar difernetes tipos de datos con una
aplicacion movil, los store son faciles, pero tengo que hacer 50 stores y
depues solo cambiar y pegar, sin embargo seria mas facil a futuro hacer 1
solo store que genera copias de las estructuras de las tablas que deseo
replicar de manera automatica, a esto habria que pensar que cuando el
sofftware cambie de version tendre que volver a crear store procedure es
decir copiar y pegar, cuando es mejor hacer 1 solo esfuerzo.
P.D. no se como se replica en memoria, por eso es que no se si se esta
haciendo eso si o no.

Muchas Gracias
Jorge

"Maxi [MVP]" escribió en el mensaje
news:
Hola, a ver, estas replicando tablas en memoria? cual es realmente el
objetivo de hacer esto y complicar la cosa asi? no seria mejor hacerte un
Select Into? que estas buscando realmente resolver que quieres aplicar


esto


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"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
>
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida