Selbst wenn man sich die neue DevStudio-Edition "DBPro" (inkl. der netten Werkzeuge) nicht leisten mag/kann und einem die 180-Tage-Testversion zu groß ist, dann muss man nicht auf die Funktion TableDiff verzichten.

Dieses kleine Programm kommt mit dem SQL-Server-2005 mit und ist eigentlich für die Replikation gedacht. Es steht unter ":\Programme\Microsoft SQL Server\90\COM\tablediff.exe" zur Verfügung. Damit kann man den Inhalt einer Tabelle intelligent von einer DB in die andere kopieren.

Es bietet auch die Möglichkeit, einen echten Diff zwischen zwei Tabellen durchzuführen, auch zwischen 2000 und 2005. Im folgenden Beispiel habe ich der Übersichtlichkeit halber die Befehlszeile umgebrochen:

"C:\Programme\Microsoft SQL Server\90\COM\tablediff.exe"
-sourceserver "MyBigPC\MyYukon" -sourcedatabase "Northwind"
-sourceschema "dbo" -sourcetable "Orders"
-sourceuser sa -sourcepassword samplepwd
-destinationserver "MyBigPC\MyLittleSQL" -destinationdatabase "Northwind"
-destinationschema "dbo" -destinationtable "Orders"
-destinationuser sa -destinationpassword samplepwd
-f
Microsoft (R) SQL Server Replication Diff Tool
Copyright (C) 1988-2005 Microsoft Corporation. All rights reserved.

User-specified agent parameter values:
-sourceserver MyBigPC\MyYukon
-sourcedatabase Northwind
-sourceschema dbo
-sourcetable Orders
-sourceuser sa
-sourcepassword samplepwd
-destinationserver MyBigPC\MyLittleSQL
-destinationdatabase Northwind
-destinationschema dbo
-destinationtable Orders
-destinationuser sa
-destinationpassword samplepwd
-f

Table [Northwind].[dbo].[Orders] on MyBigPC\MyYukon and Table [Northwind].[dbo].[Orders] on MyBigPC\MyLittleSQL are identical.
The requested operation took 0,46875 seconds.

Wenn ein Unterschied besteht, dann sieht der Output so aus:

Table [Northwind].[dbo].[Orders] on MyBigPC\MyYukon and Table [Northwind].[dbo].
[MyOrders] on MyBigPC\MyLittleSQL have 26 differences.
Fix SQL written to DIFFIX.633029232857656250.sql.
Err OrderID Col
Src. Only 11052
Src. Only 11053
Src. Only 11054
Src. Only 11055
Src. Only 11056
Src. Only 11057
Src. Only 11058
Src. Only 11059
Src. Only 11060
Src. Only 11061
Src. Only 11062
Src. Only 11063
Src. Only 11064
Src. Only 11065
Src. Only 11066
Src. Only 11067
Src. Only 11068
Src. Only 11069
Src. Only 11070
Src. Only 11071
Src. Only 11072
Src. Only 11073
Src. Only 11074
Src. Only 11075
Src. Only 11076
Src. Only 11077
The requested operation took 0,296875 seconds.

Und in der "Fix-Datei" steht dann (gekürzt):

-- Host: MyBigPC\MyLittleSQL
– Database: [Northwind]
– Table: [dbo].[Orders]
SET IDENTITY_INSERT [dbo].[Orders] ON
INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('HANAR',3,67,2600,'1998-04-27 00:00:00.000',11052,'1998-05-25 00:00:00.000','Rua do Paço, 67','Rio de Janeiro','Brazil','Hanari Carnes','1998-05-01 00:00:00.000','05454-876','RJ',1)
INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('PICCO',2,53,0500,'1998-04-27 00:00:00.000',11053,'1998-05-25 00:00:00.000','Geislweg 14','Salzburg','Austria','Piccolo und mehr','1998-04-29 00:00:00.000','5020',NULL,2)

INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('RATTC',1,8,5300,'1998-05-06 00:00:00.000',11077,'1998-06-03 00:00:00.000','2817 Milton Dr.','Albuquerque','USA','Rattlesnake Canyon Grocery',NULL,'87110','NM',2)
SET IDENTITY_INSERT [dbo].[Orders] OFF

Wenn man auch Unterschiede in den Datensätzen ("auf Spaltenebene") sehen will, dann ist die Option "-c" interessant.

Nützlich, oder?