Jump to content
Fórum Script Brasil
  • 0

Ajuda na criação de update


Pompeu
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...