none
Como podria averiguar cuando un campo de una tabla tiene un dato distinto RRS feed

  • Pregunta

  • Hola me explico tengo un servidor SQL con 10 bases de datos estas, 10 BD tienen las mismas tablas yo necesito en una tabla saber si todos los campos tienen los mismos datos en las 10 bases de datos osea si la tabla es identica en las 10 bases de datos

    Habia pensado utilizar union para que así me devolvería las filas que tienen datos distintos pero no me indicaría en que bases de datos están y necesito saberlo alguno me podria dar una ayuda que otro método podría utilizar 

    gracias


    Rodolfo

    martes, 15 de noviembre de 2016 15:01

Respuestas

  • Puedes unirlas con Join y mostrar los campos, te dejo el modelo para que lo completes

    Select BD1.Campo As BD1, BD2.Campo As BD2, BD3.Campo As BD3, ...
    FROM base1.dbo.Tabla as BD1
    INNER JOIN base2.dbo.Tabla as BD2 ON BD1.CampoClave = BD2.CampoClave
    INNER JOIN base3.dbo.Tabla as BD3 ON BD2.CampoClave = BD3.CampoClave
    ...
    WHERE REPLICATE(BD1.Campo,10) != BD1.Campo + BD2.Campo + BD3.Campo + ....  --Si es varchar

    o
    WHERE BD1.Campo * 10 != BD1.Campo + BD2.Campo + BD3.Campo + .... -- Si es numerico

    martes, 15 de noviembre de 2016 15:18
  • Yo lo haría con Integration Services, pero ... si no tienes experiencia o no quieres aprenderlo..

    puedes utilizar hashbytes, con todas las columnas menos la pk. la idea sería algo así

    select primary key columns, hashbytes(restodecolumnas) hash,'servidor1' as origen
    from servidor1.bbdd.esquema.tabla1EnBBDD1
    
    


    esto puedes volcarlo en una tabla que tenga, la primary key, la columna has y el origen para todos los server, imaginemos que eso lo vuelcas en una tabla que se llama diferenciastabla1

    select primary key columns, count(distinct columnmahash) cuantos
    from diferenciastabla1
    group by primary key columns
    having count(distinct columnahash)>1
    

    este query te devolverá aquellas filas que tengan alguna diferencia entre los distintos servidores. Si no sale nada, es que está igual en todos, si sale algo.. entonces sabes exactamente en que fila

    con los que salgan puedes investigar en cada una de las bbdds para averiguar cual es distinta y porque.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 15 de noviembre de 2016 18:02
    Moderador
  • Estimado gracias por sus respuestas al final lo hice con entity framework y linq genere la consulta y luego con foreach fui  comparando los datos de la tabla en cada base de datos y listo al principio estaba muy atrapado pero resulto super gracias a todos los que comentaron


    Rodolfo

    • Marcado como respuesta ELRMRA martes, 29 de noviembre de 2016 20:33
    martes, 29 de noviembre de 2016 20:33

Todas las respuestas

  • Puedes unirlas con Join y mostrar los campos, te dejo el modelo para que lo completes

    Select BD1.Campo As BD1, BD2.Campo As BD2, BD3.Campo As BD3, ...
    FROM base1.dbo.Tabla as BD1
    INNER JOIN base2.dbo.Tabla as BD2 ON BD1.CampoClave = BD2.CampoClave
    INNER JOIN base3.dbo.Tabla as BD3 ON BD2.CampoClave = BD3.CampoClave
    ...
    WHERE REPLICATE(BD1.Campo,10) != BD1.Campo + BD2.Campo + BD3.Campo + ....  --Si es varchar

    o
    WHERE BD1.Campo * 10 != BD1.Campo + BD2.Campo + BD3.Campo + .... -- Si es numerico

    martes, 15 de noviembre de 2016 15:18
  • Yo lo haría con Integration Services, pero ... si no tienes experiencia o no quieres aprenderlo..

    puedes utilizar hashbytes, con todas las columnas menos la pk. la idea sería algo así

    select primary key columns, hashbytes(restodecolumnas) hash,'servidor1' as origen
    from servidor1.bbdd.esquema.tabla1EnBBDD1
    
    


    esto puedes volcarlo en una tabla que tenga, la primary key, la columna has y el origen para todos los server, imaginemos que eso lo vuelcas en una tabla que se llama diferenciastabla1

    select primary key columns, count(distinct columnmahash) cuantos
    from diferenciastabla1
    group by primary key columns
    having count(distinct columnahash)>1
    

    este query te devolverá aquellas filas que tengan alguna diferencia entre los distintos servidores. Si no sale nada, es que está igual en todos, si sale algo.. entonces sabes exactamente en que fila

    con los que salgan puedes investigar en cada una de las bbdds para averiguar cual es distinta y porque.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 15 de noviembre de 2016 18:02
    Moderador
  • Estimado gracias por sus respuestas al final lo hice con entity framework y linq genere la consulta y luego con foreach fui  comparando los datos de la tabla en cada base de datos y listo al principio estaba muy atrapado pero resulto super gracias a todos los que comentaron


    Rodolfo

    • Marcado como respuesta ELRMRA martes, 29 de noviembre de 2016 20:33
    martes, 29 de noviembre de 2016 20:33