Usuário com melhor resposta
Stored Procedure vefica e Deleta Informaçõe Repetida

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.
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
-
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
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
-
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
-
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
- Editado Robert Sancts terça-feira, 12 de abril de 2016 14:32
-
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; -
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.
- Editado Antero Marques terça-feira, 12 de abril de 2016 15:20