Pour comparer T1 (PK, A, B) et T2 (PK, A, B).
Commencez par comparer les ensembles de clés primaires pour rechercher les valeurs de clé manquantes de chaque côté:
SELECT T1.*, T2.* FROM T1 FULL OUTER JOIN T2 ON T1.PK=T2.PK WHERE T1.PK IS NULL OR T2.PK IS NULL;
Ensuite, listez toutes les incohérences de valeurs:
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 et B doivent être du même type. Vous pouvez utiliser INFORMATION SCHEMA pour générer le SELECT. N'oubliez pas le COALESCE pour inclure également les résultats IS NULL. Vous pouvez également utiliser FULL OUTER JOIN et COALESCE (T1.PK, 0) = COALESCE (T2.PK, 0).
Par exemple pour les colonnes de type 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');