我最近发现了SQL Server 2005的tablediff实用程序.
我在不同的服务器上有两个相同数据库的实例.
是否可以使用tablediff比较所有表,而不必在仅更改表名的情况下复制相同的命令?
例如,将server1上的table1与server2上的table1进行比较,然后将server1上的table2与server2上的table2进行比较,直到比较了所有表.
这可以通过将tablediff实用程序的-sourceserver选项设置为第一个服务器并将-destinationserver选项设置为第二个服务器来完成.您可以使用sys.Tables遍历数据库中的每个表,以便您可以自动执行此过程.
编辑
我还想指出这篇文章,它是一个聪明的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
Run Code Online (Sandbox Code Playgroud)