当前位置: 首页 > 面试题库 >

使用Tablediff比较所有表

何星鹏
2023-03-14
问题内容

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

我在不同的服务器上有2个相同数据库的实例

是否可以使用tablediff比较所有表,而不必仅更改表名而复制相同的命令?

例如,将服务器1上的表1与服务器2上的表1进行比较,然后将服务器1上的表2与服务器2上的表2进行比较,直到比较了所有表为止。


问题答案:

这可以通过将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


 类似资料:
  • 日安- 我正在处理一个任务,在该任务中,我有指令来创建一个名为的方法,该方法将执行以下任务: public int compare(Object first,Object second)(请注意,您还可以定义:public int compare(Attory first,Attory second),方法是让类 为此,我创建了一个类,如下所示: AthletenameComparator

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 问题内容: 无论如何,要使下面的代码仍然使用开关,而不返回它,是吗?谢谢! 当然,如果使用if语句,您将像这样: 但是对于更复杂的示例,这变得很冗长。 问题答案: 抱歉,根据switch()文档 ,您不能在switch语句中使用比较: 请注意,开关/外壳确实比较松散。 这意味着您必须提出解决方法。从松散的比较表 ,你可以利用的事实是类型转换错误:

  • 测试代码(只是为了遵守SSCCE,显然有更好的方法来改变您自己的不区分大小写的数据模型) 比方说,我希望我的类实现遵循API中建议的强烈建议: 强烈建议,但不是严格要求(x.compareTo(y)==0) == ( x.equals(y))。 那么在中使用可以吗?当然,我们正在确保不会调用作为回报。 类似:什么时候包括什么?

  • 问题内容: 最近在一次求职面试中,有人问我以下问题(对于Java): 鉴于: 的返回值是多少 我回答它会返回false,因为它们是两个不同的对象,并且==是内存地址比较而不是值比较,并且需要使用.equals()比较String对象。但是我被告知,尽管.equals(0方法论是正确的,但是该语句仍然返回true。我想知道是否有人可以向我解释为什么它是正确的,但是为什么我们还在学校里教我们使用equ

  • 我正在我的类Employee中实现Comparator和Comparable来排序ArrayList。我在2个参数名称和ID排序。当使用collections.sort(Employee ob1,Employee ob2)进行ID排序时,它不起作用。我得到一个编译错误,即类没有声明为弃权,也没有重写compare(),尽管我是这样做的: 如果我使用 我的疑问是,既然员工也是一个对象,为什么早先的不