我最近发现了SQL Server 2005的tablediff实用程序。
我在不同的服务器上有两个相同数据库的实例。
是否可以使用tablediff比较所有表,而不必仅在更改表名时复制相同的命令?
例如,将server1上的table1与server2上的table1进行比较,然后将server1上的table2与server2上的table2进行比较,直到比较了所有表。
答案 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 server和dbForge Data Compare for SQL Server。它可以比较和同步任何数据库数据和方案。快速,简单,始终提供正确的结果。
在你的数据库上运行它!
答案 2 :(得分:0)
您是否可以使用此选项在脚本文件中运行sql语句并进行比较?我可能只是一个想法。
-bf number_of_statements