使用Tablediff比较所有表

时间:2009-11-12 15:05:37

标签: sql sql-server

我最近发现了SQL Server 2005的tablediff实用程序。

我在不同的服务器上有两个相同数据库的实例。

是否可以使用tablediff比较所有表,而不必仅在更改表名时复制相同的命令?

例如,将server1上的table1与server2上的table1进行比较,然后将server1上的table2与server2上的table2进行比较,直到比较了所有表。

3 个答案:

答案 0 :(得分:8)

这可以通过将tablediff实用程序的-sourceserver选项设置为第一个服务器并将-destinationserver选项设置为第二个服务器来完成。您可以使用sys.Tables遍历数据库中的每个表,以便您可以自动执行此过程。

<强>被修改

我还想指出this article这是一个聪明的t-sql代码,可以更好地为你服务而不会出现tablediff的复杂性

根据你的评论,这是一个例子。这不是在生产环境中执行此操作的最佳方式,但它应该为您完成工作。如果你需要一个更有生产价值的选择,你可能会更好地在SSIS中实现它。

SET QUOTED_IDENTIFIER ON 

DECLARE @TableNames as table (
    id int identity(1,1),
    tableName varchar(100))

DECLARE @sTableDiff nvarchar(1000)
DECLARE @tableName varchar(100)
DECLARE @counter int
DECLARE @maxCount int

INSERT INTo @TableNames 
SELECT name 
FROM sysobjects WHERE type = 'U'

SET @counter = 1

SELECT @maxCount = COUNT(name) 
FROM sysobjects WHERE type = 'U'

WHILE @counter < @maxCount
    Begin
        SELECT @tableName = tableName 
        FROM @TableNames 
        WHERE id = @counter

        SET @sTableDiff= ' "C:\Program Files\Microsoft SQL Server\90\COM\tablediff" -sourceserver Server1 
            -sourceuser sa -sourcepassword password -sourcedatabase YourDatabase -sourcetable ' + @tableName + ' 
            -destinationserver Server2 -destinationuser sa -destinationpassword password -destinationdatabase 
            YourDatabase -destinationtable ' + @tableName + '  -f c:\Diff'      

        EXEC XP_CMDSHELL @sTableDiff

        Set @counter = @counter + 1
    End

答案 1 :(得分:1)

尝试dbForge Scheme Compare for SQL serverdbForge Data Compare for SQL Server。它可以比较和同步任何数据库数据和方案。快速,简单,始终提供正确的结果。

在你的数据库上运行它!

答案 2 :(得分:0)

您是否可以使用此选项在脚本文件中运行sql语句并进行比较?我可能只是一个想法。

-bf number_of_statements