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

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

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

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

最佳答案

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

已编辑

我还想指出 this article 这是一段聪明的 t-sql 代码,它可以为您提供更好的服务,而没有 tablediff 的复杂性

根据您的评论,这是一个示例。这不是在生产环境中执行此操作的最佳方法,但它应该为您完成工作。如果您需要一个更具生产值(value)的选项,您可能最好在 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

关于sql - 使用 Tablediff 比较所有表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1722846/

10-10 16:24