Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LyNcE

Tabelas Temporárias sql server 2005 no ASP

Recommended Posts

Olá pessoal preciso de uma ajuda...

 

Estou criando, inserindo e consultando dados em uma tabela temporaria utilizando o asp comum.

 

O problema é o seguinte, estou criando uma tabela temporaria de usuario com uma '#' só nisso insiro os dados e após isso preciso consulta-los para listar na tela, o problema é que se eu fazer qualquer tipo de consulta em uma outra tabela em meu bd que não seja a temporária e em seguida tentar consultar a tabela temporária o browser me devolve um erro como se a tabela temporaria não existisse. Eu posso fazer qualquer consulta em outra tabela depois que terminar de mexer com a temporaria.... eu verifiquei a hipotese da tabela ter sido excluida e vi que não.. ai depois fiz o seguinte teste criei a tabela temporaria de sistema com '##' ai posso mexer em qualquer outra tabela antes ou depois da temporaria que não da erro nenhum. O problema que usar tabelas de sistema consome mais do sistema do que a tabela de usuario.. e em meu caso ficaria inviavel pois tenho muitos usuarios na rede.

Minha pergunta é, por que com a tabela temporaria sendo usuario '#' da erro se eu mexer em outra tabela antes e a tabela temporaria de sistema com '##' não da erro?

 

Qual o vinculo?

 

 

Detalhe o erro só ocorre se eu for fazer select em qualquer tabela... se for insert não da erro...

 

Segue abaixo meu código.

 

vartb = "variavel com login do usuario"

 

 

ta ="create table #" & vartb & "(codigo int not null, tamanho varchar(03) not null, corte varchar(13) null, qtd int null, vr numeric(10,2) null, total numeric(10,2) null, primary key(codigo, tamanho))"

conn.execute(ta)

 

ta="insert into #" & vartb &"(codigo, tamanho, corte, qtd, vr, total) values(" & cd & ",'" & tm & "','" & mar & "'," & qt & "," & val & "," & tot & ")"

conn.execute ta

 

trysql = "select USUARIOID,MNUSITEID from PERMISSOES.TB_USRXMNUSITE where (USUARIOID='" & secusr & "') and (MNUSITEID='" & telaid & "')"

set trye = conn.execute(trysql) // select em uma tabela de permissoes do usuario.

 

 

op = "select * from #" & vartb & "" // select na tabela temporaria...

set ki = conn.execute(op)

 

 

O que pode estar acontecendo?

 

 

Aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Laboratório de scripts (ASP) http://forum.imasters.com.br/public/style_emoticons/default/seta.gif ASP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal preciso de uma ajuda...

 

Estou criando, inserindo e consultando dados em uma tabela temporaria utilizando o asp comum.

 

O problema é o seguinte, estou criando uma tabela temporaria de usuario com uma '#' só nisso insiro os dados e após isso preciso consulta-los para listar na tela, o problema é que se eu fazer qualquer tipo de consulta em uma outra tabela em meu bd que não seja a temporária e em seguida tentar consultar a tabela temporária o browser me devolve um erro como se a tabela temporaria não existisse. Eu posso fazer qualquer consulta em outra tabela depois que terminar de mexer com a temporaria.... eu verifiquei a hipotese da tabela ter sido excluida e vi que não.. ai depois fiz o seguinte teste criei a tabela temporaria de sistema com '##' ai posso mexer em qualquer outra tabela antes ou depois da temporaria que não da erro nenhum. O problema que usar tabelas de sistema consome mais do sistema do que a tabela de usuario.. e em meu caso ficaria inviavel pois tenho muitos usuarios na rede.

Minha pergunta é, por que com a tabela temporaria sendo usuario '#' da erro se eu mexer em outra tabela antes e a tabela temporaria de sistema com '##' não da erro?

 

Qual o vinculo?

 

 

Detalhe o erro só ocorre se eu for fazer select em qualquer tabela... se for insert não da erro...

 

Segue abaixo meu código.

 

vartb = "variavel com login do usuario"

 

 

ta ="create table #" & vartb & "(codigo int not null, tamanho varchar(03) not null, corte varchar(13) null, qtd int null, vr numeric(10,2) null, total numeric(10,2) null, primary key(codigo, tamanho))"

conn.execute(ta)

 

ta="insert into #" & vartb &"(codigo, tamanho, corte, qtd, vr, total) values(" & cd & ",'" & tm & "','" & mar & "'," & qt & "," & val & "," & tot & ")"

conn.execute ta

 

trysql = "select USUARIOID,MNUSITEID from PERMISSOES.TB_USRXMNUSITE where (USUARIOID='" & secusr & "') and (MNUSITEID='" & telaid & "')"

set trye = conn.execute(trysql) // select em uma tabela de permissoes do usuario.

 

 

op = "select * from #" & vartb & "" // select na tabela temporaria...

set ki = conn.execute(op)

 

 

O que pode estar acontecendo?

 

 

Aguardo

LyNcE o que eu vejo é o seguinte: tabelas temporárias ficam ativas somente durante a sua execução, após isso elas não podem ser mais utilizadas.

 

A sua rotina ficará melhor dentro de uma Stored Procedure, onde você poderá criar, inserir e consultar a sua tabela temporária, não esqueça de destruir após a sua utilização se não irá "comer" todo o espaço da sua base TempDB.

Então via ASP você irá fazer uma única chamada e não varias como reportado acima.

 

Espero ter ajudado.

 

Ps.: Evite criar tabela temporária global (##) pois irão matar a performance do seu banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

LyNcE o que eu vejo é o seguinte: tabelas temporárias ficam ativas somente durante a sua execução, após isso elas não podem ser mais utilizadas.

Exatamente, sendo assim quando você fizer um Commit a tabela será destruída, isso ocorre porque tanto o Access quanto o Sql Server por padrão tem o AutoCommit ativado, assim, qualquer Insert, Update ou Delete que você fizer, implicitamente o banco de dados faz o Commit destruindo assim sua tabela temporária.

No Oracle você pode criar uma tabela temporária e escolher qual o momento da sua destruição, por Execução (Commit) ou por Sessão (Logout) dê uma pesquisada se isso é possível no Sql Server, ou faça o que Francis Robinson indicou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.