Carregando ...
Desculpe, ocorreu um erro ao carregar o conteúdo.

33172RE: [mssql-l] Sp para excluir registro

Expandir mensagens
  • João Polisel
    28 de jan 14h22min

      Boa tarde Dalmiro,

       

      Mais um motivo para você deixar a constraint quieta...

       

      Quando você cria a constraint em uma tabela que já tem dados o SQL Server tem que garantir que os dados que já existem na tabela não violam a constraint.

       

      Para uma Foreign Key, isso consiste em verificar que não há registros orfãos (existe apenas na tabela filha) e isso pode ser pesado dependendo do volume de dados.

       

      Se você apenas desabilitar a constraint, quando habilita-la novamente precisa especificar que o SQL Server faça essa verficação, caso contrário a constraint se torna “untrusted” ou “não confiável”

       

      Quando você tem constraints untrusted em seu banco de dados o otimizador de consultas deixa de aplicar algumas otimizações resultando em planos de execução mais pobres e com pior performance.

       

      Por este motivo, lhe recomendo ficar com a opção 1

       

      []s

       

      João Polisel

       

      From: mssql-l@... [mailto:mssql-l@...]
      Sent: Thursday, January 28, 2016 8:55 AM
      To: mssql-l@...
      Subject: RES: [mssql-l] Sp para excluir registro

       

       

      Obrigado pelo retorno

      São só 3 tabelas envolvidas.

      Teoricamente só uma pessoa vai rodar esta SP e poucas vezes, pois quando o usuário achar um bom momento para a limpeza irá executar.

      Tenho 2 possibilidades...vou fazer uns testes...

      1 – tratar cada tabela

      2 – na sp, alterar a constraint para deixar apagar por cascata e no final do processo voltar a constraint para a forma normal...

       

      Irei testar

      Obrigado

      att

       

       

      De: mssql-l@... [mailto:mssql-l@...]
      Enviada em: sexta-feira, 22 de janeiro de 2016 14:16
      Para: mssql-l@...
      Assunto: Re: [mssql-l] Sp para excluir registro

       

       

      Boa tarde Dalmiro,

       

      Analisa o impacto de recriar os indices.  

      - Quantas tabelas estao envolvidas?

      - Voce pode quebrar as constrais (drop), rodar um truncate nas tabelas envolvidas e depois criar os inices novamente, fica mais rapido.  MAS!!!

      - O objetivo e apagar todo o conteudo? ou ha alguma regra de negocio que deva ser respeidata?

       

      Nos conte um pouco mais sobre a sua necessidade, este procedimento sempre ira se repetir, se sim a procedure ja é um bom caminho.

      Caso contrario, ve as tabelas envolvidas de executa o drop das contrains e trunca as tabelas.

       

      Atenciosamente,
      André Luiz R. Marques
      Administrador de Banco de Dados - SQL Server/Oracle

      Tel: (21) 99978-4564

       

      Evite imprimir. Colabore com o Meio Ambiente!

       

      "Embora ninguém possa voltar atrás e fazer um novo começo, qualquer um pode
      começar agora e fazer um novo fim."

                     Chico Xavier

       

      Em Sexta-feira, 22 de Janeiro de 2016 13:18, "'Dalmiro' dalmiroy@... [mssql-l]" <mssql-l@...> escreveu:

       

       

      Boa tarde pessoal,

      Tenho que criar uma sp, para exclusão de registros, mas a tabela principal tem relação com outras 2 tabelas e estas relações não foram criadas com referencias on delete cascade.

      Dúvidas

      1 – Posso recriar a contraint com esta referencia? Como?

      2 – Uma saída é fazer um select e depois loop e deletar os registros das tabelas relacionadas e depois a principal, é uma boa saída?

      3 – Para opção 2 como faço para colocar transação pois acho melhor para cada volta do loop, fazer o controle da transação, e uma boa?

      4 – Alguma dica?

       

      Obrigado

      att

       

      Este e-mail foi enviado por um computador sem vírus e protegido pelo Avast.
      www.avast.com

       

      Este e-mail foi enviado por um computador sem vírus e protegido pelo Avast.
      www.avast.com

    • Mostrar todas as 13 mensagens neste tópico