MODIFICAR TABELA ADICIONANDO CHAVE
Bom dia pessoal,
Tenho uma tabela chamada PARCELAS, nem possuo vários campos e entre eles os campos CODIGO e NUMERO... ambos do tipo INT
Preciso criar uma rotina para executar ela e modificar a estrutura da tabela existente...
Seria colocar o campo CODIGO como CHAVE PRIMARIA que "não permite duplicidade" e o campo NUMERO ser outra CHAVE "que permite duplicidade"
Pq preciso executar em cada cliente essa rotina no MSSM de cada cliente meu
Tenho uma tabela chamada PARCELAS, nem possuo vários campos e entre eles os campos CODIGO e NUMERO... ambos do tipo INT
Preciso criar uma rotina para executar ela e modificar a estrutura da tabela existente...
Seria colocar o campo CODIGO como CHAVE PRIMARIA que "não permite duplicidade" e o campo NUMERO ser outra CHAVE "que permite duplicidade"
Pq preciso executar em cada cliente essa rotina no MSSM de cada cliente meu
Se a tabela já tem dados, isso vai ser um pesadelo de fazer, porque pode ter vários duplicados lá, adicionados ao longo do tempo. Seria mais fácil incluir campos novos e uma rotina para copiar os dados, ignorando os duplicados e passando um relatório para os dados serem arrumados.
conforme o KERPLUNK falou se não tiver dados duplicados no campo CODIGO, da pra fazer conforme abaixo
ALTER TABLE PARCELAS
ADD CONSTRAINT pk_CODIGO PRIMARY KEY (codigo, numero);
e esses campos nao podem aceitar null
ALTER TABLE PARCELAS
ADD CONSTRAINT pk_CODIGO PRIMARY KEY (codigo, numero);
e esses campos nao podem aceitar null
Alterado em 01/02/2024 16:16:04
Obg KERPLUNK e 3SLUIS por responderem...
Realmente ao executar o código deparei com registros duplicados... poucos na verdade....
usei o código abaixo para consultar as duplicidades:
Ele me listou todos os código duplicados (12 códigos).... POSTEI O RESULTADO NO ANEXO (print)
Após isso, consultei um dos código duplicado:
E vi que existe 2 registros para o mesmo código, porem os campo COD_PEDIDO é diferente (vendas diferentes).
Postei o print no anexo..
Ai pensei em duas soluções:
-Poderia fazer um loop onde pegaria os código duplicados e editaria um a um registro colocando com o ultimo código da tabela parcelas e somaria com mais 1... exemplo: CODIGO + 1
ou
-Poderia fazer um loop onde pegaria os código duplicados e editaria o segundo registro de cada duplicação (que tivevesse dos 2 o maior COD_PEDIDO) colocando com o ultimo código da tabela parcelas e somaria com mais 1... exemplo: CODIGO + 1
Realmente ao executar o código deparei com registros duplicados... poucos na verdade....
usei o código abaixo para consultar as duplicidades:
WITH CTE AS(
SELECT [CODIGO], [NUMERO] ,RN = ROW_NUMBER()OVER(PARTITION BY CODIGO ORDER BY CODIGO)
FROM [cyber_base].[dbo].[parcelas]
)
SELECT * FROM CTE WHERE RN > 1
Ele me listou todos os código duplicados (12 códigos).... POSTEI O RESULTADO NO ANEXO (print)
Após isso, consultei um dos código duplicado:
SELECT * FROM parcelas WHERE (CODIGO = 33100)
E vi que existe 2 registros para o mesmo código, porem os campo COD_PEDIDO é diferente (vendas diferentes).
Postei o print no anexo..
Ai pensei em duas soluções:
-Poderia fazer um loop onde pegaria os código duplicados e editaria um a um registro colocando com o ultimo código da tabela parcelas e somaria com mais 1... exemplo: CODIGO + 1
ou
-Poderia fazer um loop onde pegaria os código duplicados e editaria o segundo registro de cada duplicação (que tivevesse dos 2 o maior COD_PEDIDO) colocando com o ultimo código da tabela parcelas e somaria com mais 1... exemplo: CODIGO + 1
Segundo anexo
Tópico encerrado , respostas não são mais permitidas