Jump to content
Mauro André

Como criar tabela temporaria no SQL Server

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.