Sql server 在SQL Server 2008 R3中使用单个存储过程更新唯一/重复的数据记录
我有一个带有以下列的表FileInfoSql server 在SQL Server 2008 R3中使用单个存储过程更新唯一/重复的数据记录,sql-server,stored-procedures,sql-server-2008-r2,duplicates,Sql Server,Stored Procedures,Sql Server 2008 R2,Duplicates,我有一个带有以下列的表FileInfo **(SID int) Primary Key & AutoIncrement, FileName varchar, FilePath varchar, fileExtn varchar, CreatedDate smalldatetime, Duplicate varchar, LatestCopy varchar.** 本文件中的记录如下所示 1, 02-2511-510.pdf, C:\Desktop\02-2511-510.pdf, .p
**(SID int) Primary Key & AutoIncrement,
FileName varchar,
FilePath varchar,
fileExtn varchar,
CreatedDate smalldatetime,
Duplicate varchar,
LatestCopy varchar.**
本文件中的记录如下所示
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
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, 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
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
向您当前的数据致意
╔═════╦═════════════════╦══════════════════════════════╦══════════╦═════════════════════╦═══════════╦════════════╗
║ 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 ║
╚═════╩═════════════════╩══════════════════════════════╩══════════╩═════════════════════╩═══════════╩════════════╝
更新查询
1) 更新重复数据的位置
;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) 更新至Y
最新版本
;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)
结果集
╔═════╦═════════════════╦══════════════════════════════╦══════════╦═════════════════════╦═══════════╦════════════╗
║ 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 ║
╚═════╩═════════════════╩══════════════════════════════╩══════════╩═════════════════════╩═══════════╩════════════╝