Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda na criação de update


Pompeu

Pergunta

Olá a todos,

Preciso criar um update em duas tabelas, tabela 1 possui campo id chave primária, tabela 2 possui campo id_tabela1 com vários registros, seria 1 pra +, preciso alterar o campo id das duas que hj é string para int, porém não posso perder as relações, a ideia seria criar um campo a mais nas duas tabelas e correr o banco fazendo os lançamentos nesses campos porém como disse sem perder a relação, ex:

 

1 - ponteiro no primeiro registro da tabela 1, eu gravo o numero 1 (que é int) no campo novo

2 - pesquiso a tabela 2 comparando o campo string da tabela 1 e gravo o valor int da tabela 1 no resultado da tabela 2 que pode ser mais de um registro porém com o mesmo id, seria pai e filhos (no campo novo)

3 - passo o ponteiro da tabela 1 para o próximo registro fazendo o procedimento 1

4 - repito o procedimento 2

e assim por diante, depois pensei em excluir o campo string das duas tabelas e passar a usar só o campo int, ou se alguém tiver uma lógica mais coerente aceito de boa

 

Seria isso, não sei se expliquei bem, estou com um pouco de urgência, se alguém puder ajudar ficaria muito grato.

Obrigado gente

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Proceda assim:

Faça um backup das tabelas em questão.

Desvincule o constraint se existir.

Converta o campo de string para numerico varchar para int

Os campos devem ser do mesmo tipo e tamanho nas duas tabelas.

refaça o vinculo de constraint.

Verifique se tudo está ok

Se estiver ok elimine as tabelas de backup.

Mais simples do que você está querendo fazer.

Se você errar é so voltar o backup destas tabelas

 

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta Denis,

O problema é que o campo string está com o id nesse formato "CT-0001" então não conseguiria fazer a troca de Str pra Int, mas consegui resolver amigo, pesquisei sobre SPs (Stored Procedures) e fiz da seguinte forma:

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_update_id_contabilidade` $$
CREATE DEFINER=`localhost`@`%` PROCEDURE `sp_update_id_contabilidade`()
BEGIN
  	DECLARE v_id VARCHAR(10);
  	DECLARE v_id_novo INTEGER;

		DECLARE contab_eof INTEGER DEFAULT 0;
		DECLARE cur_contab CURSOR FOR
  		SELECT id, id_novo
  		FROM contabilidade
  		ORDER BY id ASC;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET contab_eof = 1;

    OPEN cur_contab;
		FETCH cur_contab INTO v_id, v_id_novo;
    WHILE NOT contab_eof DO

  		UPDATE contabilidade_rc SET idregistro_novo = v_id_novo WHERE idregistro = v_id;
  		FETCH cur_contab INTO v_id, v_id_novo;
    END WHILE;

  	CLOSE cur_contab;

  END $$

DELIMITER ;

 

Não sei se é a maneira correta, inclusive se puder me orientar se tiver alguma forma mais correta eu agradeço.

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...