Используйте Tablediff для сравнения всех таблиц - PullRequest
6 голосов
/ 12 ноября 2009

Я недавно обнаружил утилиту tablediff в SQL Server 2005.

У меня есть 2 экземпляра одной и той же базы данных на каждом сервере.

Можно ли сравнить все таблицы, используя tablediff, без необходимости повторять одну и ту же команду, изменяя только имя таблицы?

Например, сравните таблицу1 на сервере1 с таблицей1 на сервере2, затем сравните таблицу2 на сервере1 с таблицей2 на сервере2, пока все таблицы не будут сопоставлены.

Ответы [ 3 ]

8 голосов
/ 12 ноября 2009

Это можно сделать, установив параметр -sourceserver утилиты tablediff для первого сервера и параметр -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
1 голос
/ 12 апреля 2010

Попробуйте Сравнение схем dbForge для SQL-сервера и Сравнение данных dbForge для SQL Server . Он может сравнивать и синхронизировать любые данные и схему базы данных. Быстро, легко, всегда дает правильный результат.

Запустите его на своей базе данных!

0 голосов
/ 12 ноября 2009

Можете ли вы использовать эту опцию для запуска операторов sql в файле сценария и сравнения? Я могу ошибаться только мысль.

-bf number_of_statements

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...