2009-09-29 13 views
0

J'utilise SQL Server 2000, et étant donné un ensemble de données (avec des ID uniques), je veux comprendre les diffs avec des lignes dans la base de données, correspondant aux ID uniques. J'essaie aussi de le garder aussi flexible que possible.Table Diff dans SQL Server 2000

Je peux utiliser C#/VB dans la partie frontale pour prendre les paramètres, ou même retourner des choses. Peut-être passer en XML et obtenir XML en retour?

Par exemple, je veux une fonction qui appelle:

// returns the columns that are different 
func(A, B, C) { 

} 

Toutes les idées?

Répondre

3

Il y a un truc cool que vous pouvez utiliser avec UNION:

SELECT MAX(tbl) AS TABLE_NAME, unique_key 
FROM (
    SELECT 'table1' AS tbl, unique_key 
    FROM table1 
    UNION ALL 
    SELECT 'table2' AS tbl, unique_key 
    FROM table2 
) AS X GROUP BY unique_key 
HAVING COUNT(*) = 1 

Ceci montrera où un côté ou l'autre a des rangées que l'autre n'a pas.

Cela peut être étendu pour faire plus, évidemment.

Alternativement, vous pouvez faire un INNER JOIN (matchs sur les touches où les données sont différentes), LEFT JOIN (clé manquante sur un côté) et RIGHT JOIN (clé manquante sur l'autre) et UNION tous ensemble. J'ai effectivement un utilitaire SP (il utilise l'une ou l'autre méthode en fonction des options dont vous avez besoin) qui va comparer deux tables et a des options pour définir quelles colonnes sont considérées comme la partie des clés, quelles colonnes ignorer, restreindre chaque côté à un sous-ensemble, etc. Il a même une option pour écrire les différences dans une table.

2

je partirais avec un outil "données diff" existantes comme

Marc

+0

Je voudrais aussi mettre à niveau à partir de SQL Server 2000 avant que ces grands outils cesser de le soutenir. –

0

Ouais d'accord avec Marc, un outil spécialisé qui fonctionne le mieux, quelque chose comme Volpet Table Diff pour SQL Server

Questions connexes