none
Comparação de Dados e Estrutura RRS feed

  • Pergunta

  • Eu preciso de duas coisas, comparar estruturas de tabelas e dados.

    1. Comparar as estruturas afim de encontrar diferenças em tamanho de campos, tipo de dados e campos que existem de um lado e do outro não.

    2. Comparar os dados entre elas para saber o que preciso Inserir, Atualizar e Excluir do Lado A para o Lado B de forma abstrata, sem amarrar os campos, o intuito é justamente evitar erros do tipo, esquecer de incluir uma coluna na comparação.

    terça-feira, 1 de agosto de 2017 11:29

Respostas

  • O que vc precisa na verdade e um Comparador de banco ,fazer isso via T-Sql e muito Complexo , por isso existem diversas ferramentas 

    que faz um compare do banco , eu gosto muito dessa abaixo , entretanto e paga.

    http://www.red-gate.com/products/sql-development/sql-compare/

    mas achei uma free ,mas sinceramente nunca usei.

    http://dbcomparer.com/


    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves


    terça-feira, 1 de agosto de 2017 13:05

Todas as Respostas

  • Acredito, que o operador Merge resolva parte do que vc está querendo (Comparar os dados entre elas para saber o que preciso Inserir, Atualizar e Excluir)

    peguei esse trecho do primeiro post (https://sqlgo.wordpress.com/2011/04/23/usando-o-comando-merge/), veja o exemplo

     

    CREATE TABLE #Tabela1 ( Nome VARCHAR (100)
    
    
                                           , Cadastro DATETIME
    
                                           , Alteracao DATETIME
    
                                           , Ativo BIT)
    
    INSERT #Tabela1
    
    VALUES (‘Andressa’, GETDATE(), NULL, 1),
    
                (‘Joao’, GETDATE(), NULL, 1),
    
                (‘Maria’, GETDATE(), NULL, 1),
    
                (‘Ana’, GETDATE(), NULL, 1)
    
    
    CREATE TABLE #Tabela2 ( Nome VARCHAR(100)
    
                                           , Twitter VARCHAR(100))
    
    INSERT #Tabela2
    
    VALUES (‘Andressa’,‘@dre_martins’),
    
                (‘Marieta’,‘@Marieta’),
    
                (‘Joaquim’,‘@Joaquim’),
    
                (‘José’,‘@jose’)
    
    
    
    SELECT * FROM #Tabela1
    
    SELECT * FROM #Tabela2

    Instrução merge

    MERGE #Tabela1 AS Destino
    
    USING #Tabela2 AS Origem
    
    ON Destino.Nome = Origem.Nome
    
    — Há registro no destino e na origem
    
    WHEN MATCHED
    
    THEN UPDATE SET Ativo = 0, Alteracao = GETDATE()
    
    –Quando não há registro no destino e há na origem
    
    WHEN NOT MATCHED
    
    THEN INSERT (Nome, Cadastro, Ativo) VALUES (Origem.Nome, Getdate(),1)
    
    –Quando  há registro no destino mas não há na origem
    
    –e que sejam diferente de João
     
    
    WHEN NOT MATCHED BY SOURCE AND Nome <>‘Joao’
    
    THEN UPDATE SET Ativo = NULL, Alteracao = GETDATE();
    
    
    
    SELECT * FROM #Tabela1
    
    SELECT * FROM #Tabela2

    seque outros exemplos


    http://www.linhadecodigo.com.br/artigo/1653/merge-com-sql-server-2008.aspx

    https://forum.imasters.com.br/topic/396962-resolvido%C2%A0utilizando-o-comando-merge/

    Agora o que é  comparar de  forma abstrata, sem amarrar os campos, nos passe um exemplo para esclarecer.


    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves

    terça-feira, 1 de agosto de 2017 12:21
  • Legal o código, mas ainda sim eu preciso declarar os campos, eu quero saber se existe a possibilidade de fazer sem precisar declarar os campos, exemplo:

    DatabaseA.Tabela1 (Nome, Descricao, Status)

    DatabaseB.Tabela2 (Nome, Descricao, Status)

    Eu quero saber os dados que estão no DatabaseA que não estão do DatabaseB, porém sem informar o nome do campo no comando. Algo dinâmico que me liste todos os campos e possa comparar entre os lados sem a necessidade de fazer WHERE Nome NOT IN(....).

    terça-feira, 1 de agosto de 2017 12:29
  • O que vc precisa na verdade e um Comparador de banco ,fazer isso via T-Sql e muito Complexo , por isso existem diversas ferramentas 

    que faz um compare do banco , eu gosto muito dessa abaixo , entretanto e paga.

    http://www.red-gate.com/products/sql-development/sql-compare/

    mas achei uma free ,mas sinceramente nunca usei.

    http://dbcomparer.com/


    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves


    terça-feira, 1 de agosto de 2017 13:05
  • CEFL,

    Eu gosto de utilizar o DBComparer, é bastate simples, prático e de fácil compreensão.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 1 de agosto de 2017 16:27
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 7 de agosto de 2017 12:46
    Moderador