Để so sánh T1 (PK, A, B) và T2 (PK, A, B).
Trước tiên, hãy so sánh các bộ khóa chính để tìm kiếm các giá trị khóa bị thiếu ở một trong hai bên:
SELECT T1.*, T2.* FROM T1 FULL OUTER JOIN T2 ON T1.PK=T2.PK WHERE T1.PK IS NULL OR T2.PK IS NULL;
Sau đó, liệt kê tất cả các giá trị không khớp:
SELECT T1.PK, 'A' AS columnName, T1.A AS leftValue, T2.A AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.A,0) != COALESCE(T2.A,0)
UNION ALL
SELECT T1.PK, 'B' AS columnName, T1.B AS leftValue, T2.B AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.B,0) != COALESCE(T2.B,0)
A và B phải cùng loại. Bạn có thể sử dụng SCHEMA THÔNG TIN để tạo CHỌN. Đừng quên COALESCE cũng bao gồm kết quả LÀ KHÔNG. Bạn cũng có thể sử dụng FULL OUTER JOIN và COALESCE (T1.PK, 0) = COALESCE (T2.PK, 0).
Ví dụ cho các cột kiểu varchar:
SELECT concat('SELECT T1.PK, ''', COLUMN_NAME, ''' AS columnName, T1.', COLUMN_NAME, ' AS leftValue, T2.', COLUMN_NAME, ' AS rightValue FROM T1 JOIN T2 ON T1.PK=T2.PK WHERE COALESCE(T1.',COLUMN_NAME, ',0)!=COALESCE(T2.', COLUMN_NAME, ',0)')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='T1' AND DATA_TYPE IN ('nvarchar','varchar');