Excluir dados de banco sql server 2005 com data marcada
- Bom dia, estou criando um site em aspx e cs onde tenho um banco de dados sql server 2005, e queria o seguinte:
No meu banco é gravado a data de cadastro dos produtos e queria fazer uma stored procedure ou outro metodo que apagasse o esse registor com uma data ou quantidade de dias informada no momento do cadastramento desse probuto ou então uma quantidade de dias fixo, tipo, com 15 dias do cadastro o registro é apagado.
Esse asunto é de extrema importancia para mim e estou com muita urgencia, qualquer material ou ajuda sera bem vinda!
Muito obrigado
att.: Renato
Todas as Respostas
Renato,
Você pode fazer uma proc que faz isso pra você e agendá-la nos Jobs do SQL Server. Eu acho que o seu maior problema será os relacionamentos que essa tabela fará com esse produto, você já pensou sobre isso? Quando você cadastrar um novo produto, esse novo produto será usado em outras tabelas como relacionamento? O que será feito quando o registro for apagado? Os registros relacionados serão apagados também? Ficarão órfãos? Pesquise sobre Integridade Referencial na sua Foreign Key.
Criei uma proc que voce pode informar a data ou o número de dias, se não informar nada ela apaga produtos cadastrados com mais de 15 dias. É só uma idéia, veja se se aplica ao seu problema...Create Proc ApagaProdutos @data datetime = NULL, @dias int = 15 AS if @data is null -- Apaga produtos baseado no número de dias -- Delete from Tabela Where Data <= DateAdd(day, (@dias * (-1)), getdate()) else -- apaga produtos baseados na data informada -- Delete from Tabela Where Data <= @data
MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008Não teria como eu fazer uma instrução sql onde quando eu apagar o registro principal apague tudo relacionada a ela não?
Se ouver como faço?Renato,
Tem sim. Você deve criar uma Foreign Key entre as duas tabelas. Porém, ISTO É MUITO IMPORTANTE! Sua regra deve permitir isso... se você está pensando em apagar tudo em cascata deve tomar cuidado para não jogar dados importantes fora!!!
Veja o Exemplo:Create database TesteFK go use TesteFK go create table Clientes (CodigoCliente int Identity, Nome varchar(50)) Alter Table Clientes Add Constraint PK_Clientes Primary Key Clustered (CodigoCliente) Create table Vendas (CodigoItem int, CodigoCliente int, Quantidade int) Alter Table Vendas Add Constraint FK_Vendas FOREIGN KEY (CodigoCliente) References Clientes (CodigoCliente) on Update Cascade on Delete Cascade insert into clientes (Nome) values ('Nome Exemplo') insert into vendas (codigoItem, CodigoCliente, Quantidade) Values (1,1,10) select * from clientes select * from Vendas -- Veja que há o registro de vendas para o cliente 1 Delete Clientes Where CodigoCliente = 1 -- Veja que agora foi deletado o cliente e também a venda deste cliente Select * from Clientes Select * from Vendas -- Apagando as Tabelas drop Table Vendas Drop Table Clientes -- Apagando a base de testes drop database TesteFK
MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008- Não Marcado como RespostaRenato Oliver sábado, 7 de novembro de 2009 13:42
- Marcado como RespostaFernanda SimõesMSFT, Moderadorsegunda-feira, 28 de setembro de 2009 20:16
- Renato,
Melhor que isso, somente o nosso amigo Roberto executar o script em seu servidor.
Cara tá pronta a sua resposta agora é só utilizar.
Roberto,
Parabéns, show de bola.
Valeu, estou sem tempo de ajudar no fórum todos os dias, estou tentando fazer o que posso, que bom que você esta aqui com o pessoal para ajudar.
Até mais...
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA Bom dia, não estou conseguindo agendar a execução da pro no jobs do SQL Server 2005.
Poderia me ajudar em mais essa?


