none
Stored Procedure vefica e Deleta Informaçõe Repetida RRS feed

  • Pergunta

  • Bom dia sou novo na Programação e tenho a seguinte duvida.

    tenho uma tabela  com N Registro gostaria de fazer uma procedure  usando um select dos Registro repetido

    @COD as VARCHAR (MAX)

    as

    begin

      @COD =(SELECT[CODIGO]  FROM [dbo].[MATERIAL])

     delete [dbo].[MATERIAL]  WHERE [CODIGO]=@COD  

    END

    Caso alguém possa me ajudar ficarei muito agradecido.

    terça-feira, 12 de abril de 2016 13:02

Respostas

  • Robert,

    Você poderia agrupar estes registros com base em uma determinado condição e fazer a contagem deste itens, onde caso a contagem venha a ser acima de 2 o mesmo será considerado repetido.

    Veja este exemplo, utilizando CTE:

    Create Table #prod
     (Product_Code Varchar(10),
      Product_Name Varchar(100))
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('123','Product_1')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('234','Product_2')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('456','Product_4')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('567','Product_5')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('678','Product_6')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('789','Product_7')
    
    SELECT *
    FROM #prod;
    
    With Dups as
    (
      Select *, Row_Number() over (partition by Product_Code order By Product_Code) as RowNum
      from #prod
    )
    
    Delete from Dups where rownum > 1;
    
    --Observe o registro duplicado 345 Product_3 foi removido.
    SELECT *
    FROM #prod;


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Robert Sancts terça-feira, 12 de abril de 2016 14:43
    terça-feira, 12 de abril de 2016 13:36
  • Bom dia Robert,

    A reposta do Junior Galvao pode lhe ajudar bem,

    Só para complementar tambem, voce pode descobri os codigos duplicados de materiais com um simples Select com um Group By e um Having, segue um exemplo simples;

    SELECT CODIGO,COUNT(*) FROM MATERIAL GROUP BY CODIGO HAVING COUNT(*) > 1

    Att

    Reginaldo Silva

    • Marcado como Resposta Robert Sancts terça-feira, 12 de abril de 2016 14:44
    terça-feira, 12 de abril de 2016 13:58

Todas as Respostas

  • Robert,

    Você poderia agrupar estes registros com base em uma determinado condição e fazer a contagem deste itens, onde caso a contagem venha a ser acima de 2 o mesmo será considerado repetido.

    Veja este exemplo, utilizando CTE:

    Create Table #prod
     (Product_Code Varchar(10),
      Product_Name Varchar(100))
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('123','Product_1')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('234','Product_2')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('456','Product_4')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('567','Product_5')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('678','Product_6')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('789','Product_7')
    
    SELECT *
    FROM #prod;
    
    With Dups as
    (
      Select *, Row_Number() over (partition by Product_Code order By Product_Code) as RowNum
      from #prod
    )
    
    Delete from Dups where rownum > 1;
    
    --Observe o registro duplicado 345 Product_3 foi removido.
    SELECT *
    FROM #prod;


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Robert Sancts terça-feira, 12 de abril de 2016 14:43
    terça-feira, 12 de abril de 2016 13:36
  • Bom dia Robert,

    A reposta do Junior Galvao pode lhe ajudar bem,

    Só para complementar tambem, voce pode descobri os codigos duplicados de materiais com um simples Select com um Group By e um Having, segue um exemplo simples;

    SELECT CODIGO,COUNT(*) FROM MATERIAL GROUP BY CODIGO HAVING COUNT(*) > 1

    Att

    Reginaldo Silva

    • Marcado como Resposta Robert Sancts terça-feira, 12 de abril de 2016 14:44
    terça-feira, 12 de abril de 2016 13:58
  • Robert,

    Você poderia agrupar estes registros com base em uma determinado condição e fazer a contagem deste itens, onde caso a contagem venha a ser acima de 2 o mesmo será considerado repetido.

    Veja este exemplo, utilizando CTE:

    Create Table #prod
     (Product_Code Varchar(10),
      Product_Name Varchar(100))
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('123','Product_1')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('234','Product_2')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('345','Product_3')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('456','Product_4')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('567','Product_5')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('678','Product_6')
    
    INSERT INTO #prod(Product_Code, Product_Name)
    VALUES ('789','Product_7')
    
    SELECT *
    FROM #prod;
    
    With Dups as
    (
      Select *, Row_Number() over (partition by Product_Code order By Product_Code) as RowNum
      from #prod
    )
    
    Delete from Dups where rownum > 1;
    
    --Observe o registro duplicado 345 Product_3 foi removido.
    SELECT *
    FROM #prod;


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Então achei interessante porem eu já tenho os registro preciso filtrar e exclui-lo. vou testar para ver se da certo.

    mas grato pela ajuda

     
    terça-feira, 12 de abril de 2016 14:29
  • Muito Obrigado. Junior Galvão e Reginaldo c. Silva

    usei o códigos de ambos para resolver.

    fiz assim:

              


        if(EXISTS(SELECT [codigo],COUNT(*) FROM material GROUP BY [codigo] HAVING COUNT(*) > 1)

          With DUPS as ( Select *, Row_Number() over (partition by [codigo] order By [codigo]) as RowNum  from material)
        Delete from DUPS where RowNum > 1;


    SELECT * FROM material; 

    terça-feira, 12 de abril de 2016 14:54
  • Muito bom Robert,

    Soube aproveitar muito bem.

    Parabéns !

    Att,


    Antero Marques

    ________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    terça-feira, 12 de abril de 2016 15:19