2009-11-12 21 views
5

ho recentemente scoperto l'utilità tablediff di SQL Server 2005.Usa tablediff per confrontare tutte le tabelle

Ho 2 istanze della stessa base di dati ciascuno su un server diverso.

E 'possibile confrontare tutte le tabelle che utilizzano tablediff senza dover replicare lo stesso comando, mentre solo cambiando il nome della tabella?

Per esempio, confrontare table1 su server1 con table1 su Server2 quindi confrontare table2 su server1 con table2 su server2, fino a quando tutti i tavoli sono stati confrontati.

risposta

7

Questo può essere fatto impostando l'opzione -sourceserver dell'utilità tablediff al primo server e l'opzione -destinationserver al secondo server. È possibile utilizzare il sys.Tables per iterare attraverso ciascuna tabella nel database in modo che sia possibile automatizzare questo processo.

a cura

Volevo anche sottolineare this article che è un pezzo intelligente di codice T-SQL che possono servire meglio senza le complicazioni di tablediff

Per il tuo commento, ecco un esempio . Questo non è un modo ottimale per farlo in un ambiente di produzione, ma dovrebbe portare a termine il lavoro per te. Probabilmente starai meglio implementando questo in SSIS se hai bisogno di più opzioni degne di produzione.

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 
+0

È possibile fornire un esempio? Grazie! – Davie

+0

Quando eseguo questo script sql, c'è un errore in cui tablediff dice che non può connettersi al database. Tuttavia, quando eseguo esattamente la stessa query in un prompt di DOS, funziona senza problemi. Il tablediff riporta che i 2 tavoli sono identici! Qualche idea? – Davie

+0

Non sono sicuro, questo è uno script che ho usato molte volte, quindi so che funziona. Se si aggiunge Print @ sTableDiff allo script e quindi si esegue l'output nel prompt dei comandi, funziona? –

0

si può fare utilizzare questa opzione per eseguire le istruzioni SQL in un file di script e confrontare? Potrei sbagliarmi solo un pensiero.

number_of_statements -BF

Problemi correlati