数据有多大,数据库之间(以及您与彼此之间)的链接有多快?有很多想法:
如果数据足够小,可以SELECT * FROM <table> ORDER BY <pk>在每个数据库上运行,然后将结果保存到制表符或逗号分隔的文件中(未对齐空格,因为这样会严重破坏生成的文件大小),然后将生成的输出与首选的diff类型进行比较实用程序,例如winmerge。这样,您就可以比较所有数据。
如果数据库可以看到彼此(很可能因为它们能够作为复制伙伴而工作)并且它们之间的链接足够高的带宽和足够低的延迟,则可以使用链接服务器功能(请参阅http://msdn.microsoft .com / en-us / library / ms190479.aspx和相关文档)来比较两个SQL语句(列出其中<table>没有相同行的行,<linked_server>.<db>..<table>反之亦然)中的表内容并进行比较您将比较两个本地表的内容。这可能是一个相对较慢的选项,但可能是强大的自动化检查。
如果由于要大大减少需要传输的数据量而需要使用校验和,请使用函数HASHBYTES而不是CHECKSUM函数系列,因为可以使用质量更好的哈希,这样可以确保它们相等。这会占用更多的CPU资源,但是对于大量数据,无论如何,您将受I / O约束,而不受CPU约束,因此将有很多空闲周期(对于少量数据,这根本没有关系)。
作为比较所有字符数据与比较覆盖所有数据的单个校验和之间的中间立场,您可以SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>从每个数据库导出并比较这些结果以查看它们是否相同(或SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>减少数据量)。流动,但在输出中包含PK意味着您可以确定行有所不同的行(如果有的话),而无需进行更多查询)。当然,如果平均行中的数据小于生成的哈希,则最后一个选项毫无意义,在这种情况下,“ compare everything ”选项将更加有效。