回答

收藏

使用Tablediff比较所有表

技术问答 技术问答 175 人阅读 | 0 人回复 | 2023-09-14

我最近发现了SQL Server 2005的tablediff实用程序。& U3 H8 Z3 i) ]) `  C" H! \
我在不同的服务器上有两个相同数据库的例子。
3 D* C  D5 w  s是否可用tablediff复制相同的命令而不仅仅是更改表名?
, \: f! b$ ~, [$ G" b3 r例如,将服务器1上的表1与服务器2上的表1进行比较,然后将服务器1上的表2与服务器2上的表2进行比较,直到所有表都进行比较。' O0 D1 P" T: ^$ i( L: v
                                                                7 H7 z  }4 o5 I# l# k0 N( ?
    解决方案:                                                               
( a* @2 p6 l7 s                                                                这可以通过将军tablediff实用程序的-sourceserver将选项设置为第一台服务器-
0 t" d$ j% |+ N0 N) y4 Kdestinationserver选项设置为第二台服务器。您可以使用它sys.Tables通过数据库中的每个表,可以自动执行此过程。+ }9 e1 M$ @& a' u: \
已编辑, v$ A' i9 c6 }3 y7 V
我还想指出这篇文章,这是一篇巧妙的文章T-
: G3 J+ X: z1 r8 b% DSQL不添加代码tablediff在复杂的情况下为您提供更好的服务4 q3 k# \9 G- x, N. c: C
根据你的评论,这里有一个例子。这不是在生产环境中实施这项操作的最佳方式,但它可以为您完成工作。如果你需要一个更有生产价值的选择,最好是SSIS实现此功能。
1 k6 Y- \( S7 J% M2 Z2 m$ j% oSET QUOTED_IDENTIFIER ONDECLARE @TableNames as table  id int identity    tableName varchar(100))DECLARE @sTableDiff nvarchar(1000)DECLARE @tableName varchar(100)DECLARE @counter intDECLARE @maxCount intINSERT INTo @TableNames SELECT name FROM sysobjects WHERE type = 'U'SET @counter = 1SELECT @maxCount = COUNT(name) FROM sysobjects WHERE type = 'U'WHILE @counter < @maxCount    Begin        SELECT @tableName = tableName         FROM @TableNames         WHERE id = @counter        SET @sTableDiff= ' &quot;C:\Program Files\Microsoft SQL Server\90\COM\tablediff&quot; -sourceserver Server                                                                                                                                                                                                                                          -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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则