T-SQL - 是否有(免费)方法来比较两个表中的数据?

RPM*_*984 8 t-sql sql-server sqlcompare sql-server-2008

我有table atable b.(SQL Server 2008)

两个表都具有完全相同的模式.

出于此问题的目的,请考虑table a=我的本地开发表,table b=实时表.

我需要创建一个SQL脚本(包含UPDATE/DELETE/INSERT语句),它将表b更新为与表a相同.然后,此脚本将部署到实时数据库.

任何可以做到这一点的免费工具,或者更好的方式我自己可以做到这一点?

我想我可能需要在表中的所有字段上进行某种类型的连接,然后根据它生成动态SQL.

有人有主意吗?

编辑

好吧,我想我会澄清一下这个问题.

我需要同步的表是一个简单的查找表.数据非常简单明了.

这是一个TABLE A可能的样子:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           0
Run Code Online (Sandbox Code Playgroud)

这是一个TABLE B可能的样子:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           1
Run Code Online (Sandbox Code Playgroud)

基本上,我想要做的就是更新该BIT列(IsFoo)TABLE B以匹配TABLE A相同IdFoo 的相应值.

记住:

  • TABLE A 在我的本地机器上
  • TABLE B 在实时服务器上

显然我TABLE B在我的本地机器上有一个(可靠的)备份,我需要编写脚本,然后在实时服务器上运行脚本.

该表还具有引用完整性(我未显示的其他列).这意味着我不能只删除所有内容TABLE B并从中进行插入TABLE A.

这个脚本将是一次性的.所以不需要做像链接服务器,复制等的事情.通过伙伴们欣赏答案.=)

编辑:

好的 - 所以我选择了Oleg的答案(VS2010 Data Compare).快速,简单,有魅力.

不是说其他​​答案都不正确.我很感激所有答案!

小智 6

迟到的答案但对线程访问者有用

除了其他提到的解决方案,我可以建议尝试ApexSQL Data Diff.它可以比较和同步SQL Server数据库数据(在实时数据库和备份中),并自动化和计划数据迁移.它也适用于大型数据库,并且能够直接从SSMS执行比较.

您可以免费下载此工具并使用它.它具有功能齐全的免费试用版,并提供适用于SQL Express和Azure SQL数据库的社区版(试用期结束后).

要了解有关该工具的更多信息,请访问http://www.apexsql.com/sql_tools_datadiff.aspx


Mar*_*ith 5

如果您只想同步表并且不关心提前查看更改,MERGE命令可以执行此操作.

MSDN - MERGE(Transact-SQL)

(免费)Microsoft SSDT还内置了数据比较和同步功能,但它比Redgate数据比较等付费工具更受限制.


Ole*_*leg 5

在非常简单的情况下,您将能够在本地SQL Server中定义一个新的链接服务器(请参阅Microsoft SQL Server Management Studio中的"服务器对象"/"链接服务器")并使用INNER JOINOUTER JOIN查找A和B表之间的差异.

在实际的和更复杂的情况下,你应该考虑参照完整性,不同的外键和标识(自动递增)现有在目标数据库中的字段,所以更新脚本将更为复杂.因此,我建议您不要花时间创建开发人员和生产数据库的同步,而应使用标准工具.我使用Visual Studio Team Edition 2008(或数据库版)或Visual Studio 2010 Ultimate版的功能来比较两个数据库中的数据.它工作得很好.