gpt4 book ai didi

sql - 使用 Tablediff 比较所有表

转载 作者:行者123 更新时间:2023-12-02 18:44:54 35 4
gpt4 key购买 nike

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

我有两个相同数据库的实例,每个实例位于不同的服务器上。

是否可以使用 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com