Usuário com melhor resposta
Criar Trigger no SqlExpress para limpar tabela Temporaria

Pergunta
-
Boa noite, estou fazendo um programa onde eu tenho uma tabela temporaria para armazenar os dados de uma venda, eu vou adicionando itens e salvando na tabela temporaria, apos terminar de inserir os intens da venda eu faço um insert na minha tabela itens de venda e tenho que limpar os dados da tabela temporaria com uma trigger, pois ela precisa estar limpa para a proxima venda, ma tabela TEMPORARIA eu tenho os seguintes atributos da venda
CodigoTBLtemporaria int
CodigoDaVenda int;
CodigoDoProduto int;
Quantidade int;
ValorTotal Decimal;
Preciso deletar todos esses dados na Temporaria, lembrando que eu posso ter vairas linhas de itens, preciso fazer isso com uma trigger,ela ja esta salvando na tabela de itens porem nao consigo limpar a tabela, ajudem por favor, desde ja muito obrigada
Respostas
-
Colega, acho a ideia da criação da Trigger uma péssima ideia.
Se, em algum momento, você já faz a inserção dos dados na tabela física, imediatamente após esta inserção faça a limpeza da tabela temporária, com um Truncate (como sugerido pelo Fabio).
Na verdade esse tipo de recurso é muito pouco utilizado. Normalmente usam-se tabelas temporárias locais para isso (somente uma #). E já que a tabela é local, significa que ela é "sua" (da sua sessão). E se ela é "sua", destrua e recrie a tabela.
Ou seja, no início do seu procedimento terá, em algum momento, um Create table #Tabela (...). No final do procedimento de gravação na tabela física terá um Drop Table #Tabela.
Assim você garante inclusive que nenhum lixo ficará para trás.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 21 de novembro de 2012 16:21
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 17 de dezembro de 2012 15:59
Todas as Respostas
-
Você pode colocar na trigger para após o insert na tabela de vendas a trigger dar um delete na tabela temporária
DELETE FROM TEMPORARIA
Assim a trigger irá apagar todos os registros da tabela temporária.
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
Boa noite!
Tal ação até é possivel e permitida, basta fazer como o Marcos disse e colocar um Delete na tabela temporaria. Todo caso tome cuidado pois a tabela temporaria só existe na sessão (Ou Global, mas ainda sim se a sessão que a criou cair ou deslogar a mesma deixa de existir), então para se evitar erros coloque uma validação antes:
IF(EXISTS(SELECT TOP 1 1 FROM tempdb.sys.tables WHERE name LIKE '#TabelaTemporaria'))
DELETE FROM #TabelaTemporaria
Como curiosidade, TOP 1 1 não tem diferença nenhuma de performance é apenas uma padrão meu de programação de validação de existencia visando facilidade na leitura do codigo.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com -
tudo bem eu ate sei que tenho que colocar uma trigger apos o insert, o problema é que nao sei fazer essa trigger =/ , podem dar um exemplo por favor?
e como e onde fazer essas trigger? é no codigo? eh na tabela?????
- Editado Carregar um textBox automaticamente terça-feira, 20 de novembro de 2012 02:20
-
Cara, seja um pouco mais específico.
Talvez vc não precise exatamente de uma trigger para essa finalidade, talvez a inserção de um
TRUNCATE TABLE <noma_tabela>
no script mesmo, antes de começar a inserção.
Alguns pontos no seu questionamento podem direcionar a uma nova solução ao invés da trigger, por exemplo; "..Gatilhos DML não podem ser definidos em tabelas temporárias locais ou globais." (http://msdn.microsoft.com/pt-br/library/ms189799.aspx)
Dê mais exemplos, ou poste mais do seu script para podermos ter uma visão mais ampla da sua intenção!!!
Abs,
-
Segue um exemplo de script da trigger.
CREATE TRIGGER I_Insercao ON Tabela
FOR INSERT
AS
IF(EXISTS(SELECT TOP 1 1 FROM tempdb.sys.tables WHERE name LIKE '#TabelaTemporaria'))
DELETE FROM #TabelaTemporariaFabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com -
Colega, acho a ideia da criação da Trigger uma péssima ideia.
Se, em algum momento, você já faz a inserção dos dados na tabela física, imediatamente após esta inserção faça a limpeza da tabela temporária, com um Truncate (como sugerido pelo Fabio).
Na verdade esse tipo de recurso é muito pouco utilizado. Normalmente usam-se tabelas temporárias locais para isso (somente uma #). E já que a tabela é local, significa que ela é "sua" (da sua sessão). E se ela é "sua", destrua e recrie a tabela.
Ou seja, no início do seu procedimento terá, em algum momento, um Create table #Tabela (...). No final do procedimento de gravação na tabela física terá um Drop Table #Tabela.
Assim você garante inclusive que nenhum lixo ficará para trás.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 21 de novembro de 2012 16:21
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 17 de dezembro de 2012 15:59
-
Galera,
Ao meu ver as questões que temos que analisar são:
1 - Porque utilizar uma tabela temporária?
2 - Porque limpar esta tabela?
Se as mesma vai ser excluída ou terá o seu conteúdo excluído, não seria melhor utilizar uma Variável Table ou até mesmo uma Tabela Auxiliar no banco de dados?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]