Concept simple nous faisons fondamentalement un peu d'audit, en comparant ce qui est entré, et ce qui s'est réellement passé pendant le traitement. Je suis à la recherche d'une meilleure façon d'exécuter une requête qui peut faire des comparaisons côte à côte avec des colonnes qui diffèrent légèrement dans le nom et le type de potentiy.SQL Server Comparer des tableaux similaires avec la requête
DB Mise en page:
Table (* est la condition de jointure)
Log (enregistrement de données non modifié.TotalMix.)
- LogID
- RecordID *
- Nom
- Date
- Adresse
- Produits
- etc.
Audit (record post-traitement)
- CARDID *
- RARnom
- DeploymentDate
- ShippingAddress
- Options
- etc.
Pour par exemple ce serait de travail si vous regardez après le comp ennuyeux lexité à écrire, et les problèmes de performance.
La requête se joint à gauche et à droite et les sélectionne comme des chaînes. Affichage de chaque champ correspondant.
select
cast(log.RecordID as varchar(40)) + '=' + cast(audit.CardID as varchar(40),
log.Name+ '=' + audit.Name ,
cast(log.Date as varchar(40)) + '=' + cast(audit.DeploymentDate as varchar(40),
log.Address + '=' + audit.ShippingAddress,
log.Products+ '=' + audit.Options
--etc
from Audit audit, Log log
where audit.CardID=log.RecordId
Ce qui serait quelque chose comme de sortie:
1 = 1 test = TestName 11/09/2009 = 11/10/2009 null = Mon adresse null = Roues
Cette fonctionne mais est extrêmement ennuyeux à construire. Une autre chose à laquelle je pensais était de simplement alias les colonnes, d'unir les deux tables, et de les ordonner pour qu'elles soient sous forme de liste. Cela me permettrait de voir les comparaisons de colonnes. Cela vient avec les frais généraux évidents de l'union tous.
-à-dire:
Log 1 test 11/09/2009 null, null
Audit 1 TestName 11/10/2009 Mon adresse Roues
Toutes les suggestions sur une meilleure façon de vérifier ces données? Dites-moi quelles autres questions vous pourriez avoir.
Remarques supplémentaires.Nous allons vouloir réduire l'information sans importance si, dans certains cas, nous pourrions Null la colonne si elles sont égales (mais je sais que trop lent)
case when log.[Name]<>audit.[CarName] then (log.[Name] + '!=' + audit.[CarName]) else null end
ou si nous faisons la deuxième façon
nullif(log.[Name], audit.[CarName]) as [Name]
,nullif(audit.[CarName], log.[Name]) as [Name]
Que voulez-vous dire par un meilleur moyen? Cherchez-vous un meilleur moyen d'afficher les données afin de pouvoir les lire plus clairement? Voulez-vous limiter les données uniquement aux personnes ayant des différences? –
Mieux que dans la performance, et la lisibilité. Nous faisons beaucoup de travail pour analyser ces données, donc nous filtrerons au besoin, mais nous pourrions aussi faire quelque chose comme ce qui précède. Si certaines colonnes sont égales, nous pourrions les annuler afin que nous puissions passer plus rapidement au crible les résultats. – Nix
Qu'essayez-vous d'accomplir? Plus d'infos, s'il vous plait. –