Esto se puede hacer mediante el establecimiento de la opción -sourceserver de la utilidad tablediff al primer servidor y la opción -destinationserver al segundo servidor. Puede usar las tablas sys.To para iterar a través de cada tabla en la base de datos para que pueda automatizar este proceso.
editado
También quería señalar this article que es una ingeniosa pieza de código T-SQL que pueden servirle mejor sin las complicaciones de tablediff
por su comentario, aquí es un ejemplo . Esta no es una forma óptima de hacer esto en un entorno de producción, pero debería hacer el trabajo por usted. Probablemente sería mejor implementar esto en SSIS si necesita una opción más digna de producción.
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
¿Puedes dar un ejemplo? ¡Gracias! – Davie
Cuando ejecuto este script sql, hay un error donde tablediff dice que no puede conectarse a la base de datos. Sin embargo, cuando ejecuto exactamente la misma consulta en un indicador de dos, funciona sin ningún problema, es decir, ¡tablediff informa que las 2 tablas son idénticas! ¿Alguna idea? – Davie
No estoy seguro, este es un script que he usado muchas veces, así que sé que funciona. Si agrega Print @sTableDiff al script y luego ejecuta el resultado en el símbolo del sistema, ¿funciona? –