Mettre à jour des loggings de données uniques / en double à l'aide d'une seule procédure stockée dans SQL Server 2008 R3

J'ai une table FileInfo avec les colonnes ci-dessous

**(SID int) Primary Key & AutoIncrement, FileName varchar, FilePath varchar, fileExtn varchar, CreatedDate smalldatetime, Duplicate varchar, LatestCopy varchar.** 

les loggings dans ce sont comme montré ci-dessous

 1, 02-2511-510.pdf, C:\Desktop\02-2511-510.pdf, .pdf, 2000-10-12 00:00:00, NULL, NULL 2, 04-4648-500.doc, C:\Desktop\04-4648-500.doc, .doc, 2010-10-01 00:00:00, NULL, NULL 3, 02-2511-510.pdf, D:\Users\ers\02-2511-510.pdf, .pdf, 2000-11-13 00:00:00, NULL, NULL 4, 02-2511-510.pdf, E:\AGES\02-2511-510.pdf, .pdf, 2000-10-12 00:00:00, NULL, NULL 

Après l'exécution de la procédure stockée, datatables de la table doivent ressembler à celles indiquées ci-dessous

 1, 02-2511-510.pdf, C:\Desktop\02-2511-510.pdf, .pdf, 2000-10-12 00:00:00, Y, N 2, 04-4648-500.doc, C:\Desktop\04-4648-500.doc, .doc, 2010-10-01 00:00:00, N, Y 3, 02-2511-510.pdf, D:\Users\ers\02-2511-510.pdf, .pdf, 2013-11-13 00:00:00, Y, Y 4, 02-2511-510.pdf, E:\AGES\02-2511-510.pdf, .pdf, 2000-10-12 00:00:00, Y, N 
  1. Fondamentalement, j'ai besoin de find les duplicates basés sur la colonne FileName .
  2. Si le file se produit plusieurs fois, définissez la colonne Dupliquer comme 'Y'
  3. Ensuite, searchz la dernière copy du file basée sur CreatedDate et définissez la valeur LatestCopy sur Y

Je suis capable d'écrire une procédure stockée pour find les duplicates et mettre à jour la colonne Dupliquer comme Y / N. Je veux également inclure le marquage de LatestCopy dans la même procédure stockée. Comment puis je faire ça.

Mes excuses si j'ai fait une erreur, car j'apprends le SQL maintenant.

Cordialement

Vos données actuelles

 ╔═════╦═════════════════╦══════════════════════════════╦══════════╦═════════════════════╦═══════════╦════════════╗ ║ SID ║ FileName ║ FilePath ║ fileExtn ║ CreatedDate ║ Duplicate ║ LatestCopy ║ ╠═════╬═════════════════╬══════════════════════════════╬══════════╬═════════════════════╬═══════════╬════════════╣ ║ 1 ║ 02-2511-510.pdf ║ C:\Desktop\02-2511-510.pdf ║ .pdf ║ 2000-10-12 00:00:00 ║ NULL ║ NULL ║ ║ 2 ║ 04-4648-500.doc ║ C:\Desktop\04-4648-500.doc ║ .doc ║ 2010-10-01 00:00:00 ║ NULL ║ NULL ║ ║ 3 ║ 02-2511-510.pdf ║ D:\Users\ers\02-2511-510.pdf ║ .pdf ║ 2000-11-13 00:00:00 ║ NULL ║ NULL ║ ║ 4 ║ 02-2511-510.pdf ║ E:\AGES\02-2511-510.pdf ║ .pdf ║ 2000-10-12 00:00:00 ║ NULL ║ NULL ║ ╚═════╩═════════════════╩══════════════════════════════╩══════════╩═════════════════════╩═══════════╩════════════╝ 

Mettre à jour les requêtes

1) Mettre à jour lorsque datatables sont dupliquées

  ;WITH Updateables AS ( SELECT * , rn = ROW_NUMBER() OVER (PARTITION BY [FileName] ORDER BY [FileName]) DESC) FROM Table_Name ) UPDATE Updateables SET Duplicate = 'Y' WHERE [FileName] IN (SELECT [FileName] FROM Updateables WHERE rn > 1 ) 

2) Mettre à jour à Y la dernière version

 ;WITH Updateables AS ( SELECT * , rn2 = ROW_NUMBER() OVER (PARTITION BY [FileName] ORDER BY CreatedDate DESC) FROM Table_Name ) UPDATE Updateables SET LatestCopy = 'Y' WHERE [SID] IN (SELECT [SID] FROM Updateables WHERE rn2 = 1) 

Jeu de résultats

 ╔═════╦═════════════════╦══════════════════════════════╦══════════╦═════════════════════╦═══════════╦════════════╗ ║ SID ║ FileName ║ FilePath ║ fileExtn ║ CreatedDate ║ Duplicate ║ LatestCopy ║ ╠═════╬═════════════════╬══════════════════════════════╬══════════╬═════════════════════╬═══════════╬════════════╣ ║ 1 ║ 02-2511-510.pdf ║ C:\Desktop\02-2511-510.pdf ║ .pdf ║ 2000-10-12 00:00:00 ║ Y ║ NULL ║ ║ 2 ║ 04-4648-500.doc ║ C:\Desktop\04-4648-500.doc ║ .doc ║ 2010-10-01 00:00:00 ║ NULL ║ Y ║ ║ 3 ║ 02-2511-510.pdf ║ D:\Users\ers\02-2511-510.pdf ║ .pdf ║ 2000-11-13 00:00:00 ║ Y ║ Y ║ ║ 4 ║ 02-2511-510.pdf ║ E:\AGES\02-2511-510.pdf ║ .pdf ║ 2000-10-12 00:00:00 ║ Y ║ NULL ║ ╚═════╩═════════════════╩══════════════════════════════╩══════════╩═════════════════════╩═══════════╩════════════╝ 

SQLFIDDLE