Ir para conteúdo

Como criar tabela temporaria no SQL Server


Mauro André

Posts Recomendados


  • Tópicos Que Criei:  65
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  333
  • Conteúdo/Dia:  0.05
  • Reputação:   2
  • Pontos/Conquistas:  2.309
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  46
  • Dispositivo:  Windows

Como a maioria ja saber não sou um perito em SQL, por isso solicito a juda para criar uma tabela temporaria para armazenar os seguintes campos, tmov.DataCriacao, tmov.Valorbruto (Vendas), tmov.Valoroutros (IPI), tmov.ValorBruto (Devoluções) e tmov.ValorOutros (IPI s/ Devoluções).

A rotina para pegar estas informações eu ja fiz só não sei como criar esta tabela temporaria e como passar por parametro o parametros @Mes 2 @Ano via gerador de Relatórios para a Procedure.

Grato.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  284
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  2.111
  • Conteúdo/Dia:  0.32
  • Reputação:   10
  • Pontos/Conquistas:  13.337
  • Conteúdo Resolvido:  0
  • Dias Ganho:  9
  • Status:  Offline
  • Idade:  45

Tem um exemplo no help que pode te ajudar

Exemplo:

CREATE PROCEDURE TESTE AS

IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='ZEXEMPLO')

BEGIN

DROP TABLE ZEXEMPLO

END

SET NOCOUNT ON

CREATE TABLE ZEXEMPLO

(CODCOLIGADA SMALLINT NOT NULL,

CODSECAO VARCHAR(20),

CHAPA VARCHAR(10))

INSERT INTO ZEXEMPLO

SELECT PFUNC.CODCOLIGADA,PFUNC.CODSECAO,PFUNC.CHAPA

FROM PFUNC

ORDER BY 1

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  65
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  333
  • Conteúdo/Dia:  0.05
  • Reputação:   2
  • Pontos/Conquistas:  2.309
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  46
  • Dispositivo:  Windows

Sebastião

Obrigado pela ajuda.

abraços.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Completando a informação:

Para criar uma tabela temporária utilize "#" antes do nome do objeto, isso fará com que o objeto seja criado diretamente no tempdb, e descartado após a trasação.

Caso vs crie uma tabela com função de armazenamento temporário sem ser no tempdb, no momento em que vc excluir essa tabela, vc vai criando espaços não alocados no teu database, sendo necessário depois a utilização do shirnk.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  284
  • Tópicos/Dia:  0.04
  • Meu Conteúdo:  2.111
  • Conteúdo/Dia:  0.32
  • Reputação:   10
  • Pontos/Conquistas:  13.337
  • Conteúdo Resolvido:  0
  • Dias Ganho:  9
  • Status:  Offline
  • Idade:  45

Esse é o Emanuel, valeu de novo cara!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Só acrescentando mais um detalhe.

Quando é criada uma tabela temporária, se criado como no 1o. exemplo ( INSERT INTO ZEXEMPLO ) ela não é exatamente uma tabela temporária. É uma tabela fixa, e observe que, sempre ao início da procedure ela é apagada. Isso mesmo, ela deixa lá os dados, até a próxima vez que for rodada, podendo ser consultados no banco os dados...

Se for criada usando o # à frente do seu nome, é uma tabela realmente temporária, sendo excluída automaticamente pelo banco de dados após o final da transação que a montou e utilizou. Essa tabela, mesmo que fique por um certo tempo sem fechar a transação, não é visível pra qualquer outro usuário do banco de dados, em qualquer outra transação. É uma tabela temporária, exclusiva desta transação aberta.

Se for utilizado ## ( dois joguinhos da velha ) esta tabela é temporária, mas é vista pelos demais usuários do banco em outras transações. Não é tão usual, mas pode lhes ser útil em alguma situação específica. É praticamente igual ao processo acima, sendo excluída ao final da transação que a criou, mas, enquanto ela estiver ativa, outros usuários podem vê-la, e podem trabalhar em conjunto com ela.

É isso ai...

Abraços.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  32
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  565
  • Conteúdo/Dia:  0.09
  • Reputação:   10
  • Pontos/Conquistas:  3.159
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  43

Jair, ótima dica. Essa eu não sabia.

Abraço!

Link para comentar
Compartilhar em outros sites

  • 12 anos depois...

  • Tópicos Que Criei:  7
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  76
  • Conteúdo/Dia:  0.03
  • Reputação:   10
  • Pontos/Conquistas:  471
  • Conteúdo Resolvido:  0
  • Dias Ganho:  6
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Linux

Pessoal realmente há como criar uma consulta com a tabela temporaria? To criando um consulta no RM e está dando "Sentença SQL não é um comando de seleção (SELECT)!" 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  7
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  76
  • Conteúdo/Dia:  0.03
  • Reputação:   10
  • Pontos/Conquistas:  471
  • Conteúdo Resolvido:  0
  • Dias Ganho:  6
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Linux

To fazendo o teste abaixo..


IF OBJECT_ID('TEMPDB..#teste') IS NOT NULL DROP TABLE #teste

select

pffinanc.chapa,

pffinanc.valor

into #teste

from pffinanc

 

where codcoligada =1

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Pra rodar isso que está precisando, apenas por procedure @vandersonbritodutra. O sistema não aceita comandos de criação de tabela diretamente nas sentenças SQL da aplicação. 

Sobre a mensagem: "Sentença SQL não é um comando de seleção (SELECT)!" ... se criar alguma chamada de Procedure, no final virá essa mensagem também, mas pode ignorar se estiver correta a chamada e passagem de parâmetros se for usado assim. 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  7
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  76
  • Conteúdo/Dia:  0.03
  • Reputação:   10
  • Pontos/Conquistas:  471
  • Conteúdo Resolvido:  0
  • Dias Ganho:  6
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Linux

Obrigado Jair.. 
 

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.