我最近发现了 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/