代码之家  ›  专栏  ›  技术社区  ›  Davie

使用tablediff比较所有表

  •  5
  • Davie  · 技术社区  · 15 年前

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

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

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

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

    3 回复  |  直到 11 年前
        1
  •  7
  •   Irwin M. Fletcher    15 年前

    这可以通过将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
    
        2
  •  1
  •   Devart    14 年前

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

    在数据库中运行它!

        3
  •  0
  •   Tamil.SQL    15 年前

    可以使用此选项运行脚本文件中的SQL语句并进行比较吗?我可能错了,只是一个想法。

    -bf语句数