Quanto sono grandi i dati e quanto velocemente sono i collegamenti tra i database e tra loro (e voi)? Esistono diverse idee:
Se i dati sono abbastanza piccoli da essere pratici, esegui SELECT * FROM <table> ORDER BY <pk>
su ciascun DB, salva i risultati in un file delimitato da tabulazioni o virgole (non spazio allineato in quanto esplode in modo massiccio le dimensioni del file risultante) e confronta l'output risultante con il tuo tipo di diff preferito utilità come winmerge. In questo modo stai confrontando assolutamente tutti i dati.
Se i database possono vedersi (molto probabilmente in quanto sono in grado di funzionare come partner di replica) e il collegamento tra loro è larghezza di banda sufficiente e latenza abbastanza bassa, è possibile utilizzare la funzionalità del server collegato (vedere http://msdn.microsoft .com / it-it / library / ms190479.aspx e relativa documentazione) e confrontare confrontare i contenuti delle tabelle in un paio di istruzioni SQL (elencando le righe <table>
che non hanno righe identiche in <linked_server>.<db>..<table>
e viceversa) proprio come confronteresti il contenuto di due tabelle locali. Questa è un'opzione relativamente lenta potenzialmente, ma potrebbe essere un controllo abbastanza potente da automatizzare.
Se hai bisogno di usare i checksum perché vuoi ridurre notevolmente la quantità di dati che devono essere trasferiti, usa HASHBYTES
piuttosto che la CHECKSUM
famiglia di funzioni in quanto puoi usare hash di qualità migliore in modo che tu sia più sicuro che risultino uguali. Questo è più impegnativo per la CPU, ma per grandi quantità di dati sarete collegati in I / O non in CPU, quindi avrete molti cicli inutilizzati (e per piccole quantità semplicemente non importa).
Come via di mezzo tra il confronto di tutti i dati carattere per carattere e il confronto di un singolo checksum che copre tutti i dati, è possibile esportare SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
da ciascun database e confrontare tali risultati per vedere se sono identici (o SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
per ridurre la quantità di dati che scorre, ma avere il PK nell'output significa che puoi identificare le righe che differiscono, se ce ne sono, con meno ulteriori query). Ovviamente quest'ultima opzione è inutile se i dati nella riga media sono più piccoli dell'hash risultante, nel qual caso l' opzione "confronta tutto " sarà più efficiente.