Dans une version d'application précédente, nous utilisions un champ particulier pour une clé primaire, mais comme le champ pouvait représenter différentes identités sur différents systèmes, nous en avons fait un champ non significatif (c'est-à-dire pas une clé primaire ou une partie d'un primaire composite) mais comme nous n'avons pas d'autre système, les utilisateurs utilisent toujours ce champ comme méthode d'identification principale. Le problème est avec l'audit ... auparavant, j'utilisais une seule table pour effectuer toutes les vérifications de la base de données en vidant les données avec un nouveau schéma oldvalue en utilisant le déclencheur générique qui circule. Cela pourrait encore fonctionner correctement, sauf pour une chose. J'ai déplacé l'information de contact dans une table distincte qui est liée à la nouvelle clé primaire de la table d'origine. Ainsi, lorsque des modifications sont effectuées, la clé primaire inconnue et inutilisée s'affiche dans le journal d'audit au lieu du foreignSystemID désormais insignifiant ...Comparer des valeurs entre deux lignes de données et afficher uniquement les colonnes qui sont différentes
J'ai migré vers une méthode d'audit de copie un à un afin que toutes les modifications apportées à une table soient maintenant écrites à une image miroir dans un schéma différent. Le problème revient à montrer les changements aux utilisateurs. Ils sont utilisés pour voir un rapport qui montre seulement les valeurs changées pour un docteur particulier ...
Ma question utiliserait des requêtes SQL et des rapports Crystal, comment pourrais-je montrer seulement les valeurs de colonnes changées entre les lignes dans mes tables d'audit? . J'ai regardé la commande de pivot, mais je ne pense pas que cela va vraiment m'aider. J'ai également regardé le code dans le script qui compare les colonnes et détermine si elles sont différentes et les écrit à la table.
Im vraiment tourner dans le sable ici et c'est un problème critique pour moi de résoudre. Merci d'avance pour toute aide ...
Nous sommes assez tôt dans la production que je pourrais changer ma méthode changetracking si besoin est, mais il doit être bientôt. grâce
EDIT:
Mon patron et moi avons travaillé sur ce un peu et c'est ce que nous avons commencé avec ... Je voudrais obtenir d'autres opinions et options ... et ... merci ..
CREATE TABLE #TEMP (
DoctorsID bigint,
TableName varchar(50),
FieldName varchar(50),
CurrentFieldValue varchar(255),
PreviousFieldValue varchar(255),
PreviousValueDate datetime
)
DECLARE @sql varchar(MAX)
SELECT
@sql = COALESCE(@sql,'') +
CAST(
'INSERT INTO #TEMP ' +
'SELECT ' +
'o.DoctorsID, ' +
'''' + TABLE_NAME + ''' ,' +
'''' + COLUMN_NAME + ''',' +
'o.' + COLUMN_NAME + ',' +
'a.' + COLUMN_NAME + ',' +
'a.AuditDate' +
' FROM ' +
'dbo.DoctorLicenses o ' +
'INNER JOIN Audit.DoctorLicenses a ON ' +
'o.DoctorsID = a.DoctorsID ' +
'WHERE ' +
'AuditDate BETWEEN ''10/01/2010'' AND ''10/31/2010'' AND ' +
'o.' + COLUMN_NAME + ' <> a.' + COLUMN_NAME +
';'
AS varchar(MAX))
FROM
INFORMATION_SCHEMA.COLUMNS AS [Fields]
WHERE
TABLE_SCHEMA = 'dbo' AND
TABLE_NAME = 'DoctorLicenses'
PRINT @sql
EXEC(@sql)
SELECT * FROM #TEMP
DROP TABLE #TEMP
désolé vous avez raison, mes questions initiales semblent toujours être ambiguës. Chaque table a une table correspondante dans un schéma distinct. dbo.contactinfo a audit.contactinfo. toutes les colonnes sont les mêmes sauf que l'audit a 2 extra (type, auditdate). Lorsqu'un dataitem est modifié, une nouvelle ligne est insérée dans la table d'audit avec les données en cours. Ainsi vous avez ce que les données étaient dans la rangée précédente (quand elles sont triées par auditdate) et quelle est la date actuelle en tant que première rangée. Ainsi, si vous interrogez la table d'audit normalement, vous obtenez une comptabilité complète de toutes les modifications apportées à cette table. – ecathell
Cependant, nos utilisateurs veulent voir une valeur actuelle/ancienne représentation de la valeur dans les colonnes. Moi et mon patron avons vraiment pu travailler à travers ce joli ... voir mes modifications ... merci – ecathell
Très bien, j'ai une meilleure idée de l'endroit où vous essayez d'aller. À quoi ressemble le résultat final? – Remus