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

BINARY_CHECKSUM para Mysql


Rodrigo83

Pergunta

Boa tarde;

Estou fazendo uma migração de banco de dados de sqlServer para Mysql, estão surgindo varias duvidas de como fazer determinadas funções que faziamos no sqlServer para fazer no Mysql.

 

Ao criar uma TRIGGER no sqlServer existe uma função chamada  BINARY_CHECKSUM que comparar os campos que realmente tiveram alterações assim podendo fazer a ação somente no que foi alterado de fato. Existe algo parecido no mysql ? Se sim como fazer ?

 

Obg.

 

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
16 horas atrás, Rodrigo83 disse:

Ao criar uma TRIGGER no sqlServer existe uma função chamada  BINARY_CHECKSUM que comparar os campos que realmente tiveram alterações assim podendo fazer a ação somente no que foi alterado de fato. Existe algo parecido no mysql ? Se sim como fazer ?

Faça o trigger normalmente. O motor do MySQL já faz isso por você.

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, Paulo Porto disse:

Caro Rodrigo,

Poste o código de erro na prática para que possamos ver. só assim se dá resposta direta e solução.

 

Olá Paulo;

Não há código de erro porque não sei como usar uma função que uso no SqlServer por tanto ainda não implementei. 

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, Denis Courcy disse:

Faça o trigger normalmente. O motor do MySQL já faz isso por você.

Olá Denis;

Não funcionou da maneira que queria. Vou tentar explicar como a trigger funciona no sqlServer para que eu possa me explicar melhor.

 Ao alterar um campo na tabela a trigger é disparada deletando um campo de outra tabela, é aí que o BINARY_CHECKSUM do sqlServer entra em ação porque ele só vai deletar o campo se houver uma real alteração em algum campo, se por exemplo ocorrer o update sem alteração de campo nada sera feito. O jeito que arranjei no mySql é meio tosco e bem trabalhoso fica dessa forma.

 

DELIMITER $$

    CREATE TRIGGER Agendamento_AU  AFTER UPDATE
        ON Agendamento
        FOR EACH ROW
    BEGIN
        if !( old.campoTavela <=> new.campoTavela ) then
            delete from AgendamentoImportadoMobile where Agendamento_IDAgendamento = new.IDAgendamento;
        end if;
            
    END $$
DELIMITER ;

Esse código acima funciona da maneira que eu quero mais eu tenho que passar campo a campo das tabelas o que é algo bem trabalhoso  e pode gerar falhas no sqlServer ele fica da seguinte forma:

 

ALTER TRIGGER [dbo].[Agendamento_AU] 
   ON  [dbo].[Agendamento] 
   AFTER UPDATE
AS 
BEGIN

    SET NOCOUNT ON;
    delete AgendamentoImportadoMobile
    from AgendamentoImportadoMobile AI
    where (select BINARY_CHECKSUM(*) from deleted d where d.IDAgendamento = AI.Agendamento_IDAgendamento)
    != (select BINARY_CHECKSUM(*) from inserted i where i.IDAgendamento = AI.Agendamento_IDAgendamento)

END

 

Só com essas linhas eu consigo varrer todas a colunas da tabela

 

 

 

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
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...