SQL Server Developer Center > Fóruns do SQL Server > SQL Server - Desenvolvimento Geral > Excluir dados de banco sql server 2005 com data marcada
Fazer uma PerguntaFazer uma Pergunta
 

PerguntaExcluir dados de banco sql server 2005 com data marcada

  • sábado, 26 de setembro de 2009 12:15Renato Oliver Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    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

  • sábado, 26 de setembro de 2009 14:51Roberto F FonsecaModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código

    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 2008
  • sábado, 26 de setembro de 2009 15:05Renato Oliver Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Nã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?

  • sábado, 26 de setembro de 2009 19:22Roberto F FonsecaModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código

    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
  • domingo, 27 de setembro de 2009 1:58Junior Galvão - MVPMVPMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    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
  • sábado, 7 de novembro de 2009 13:42Renato Oliver Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Bom dia, não estou conseguindo agendar a execução da pro no jobs do SQL Server 2005.

    Poderia me ajudar em mais essa?