Ajout de la colonne Horodatage à la key et élimination des duplicates

J'ai besoin d'append la colonne Timestamp à la contrainte de key qui a plusieurs colonnes.

Cette colonne n'a pas de partie milliseconde à l'horodatage. Le problème qu'il peut y avoir même fois à la colonne Timestamp . J'essaie de les éliminer en ajoutant une partie random milliseconde.

Ma requête

 update [vM].[dbo].[Operator] set [vM].[dbo].[Operator].Timestamp = DATEADD(MS , A.RowNumber*3 % 1000 , A.Timestamp), OperatorID = A.OperatorID , ActionID = A.ActionID , McID = A.McID , Station = A.Station , Slot = A.Slot , SubSlot = A.SubSlot, FeederID = A.FeederID, CompID = A.CompID, Description = A.Description from (SELECT (ROW_NUMBER() OVER (Order by timestamp)) % 1000 as RowNumber , * FROM [vM].[dbo].[Operator] WHERE DATEPART(ms,Timestamp) % 1000 = 0) as A 

Je reçois erreur The duplicate key value is (Dec 7 2014 10:54AM, ??, 28, 23). c'est l'logging original que j'essaye de mettre à jour.

L'heure originale que j'ai est 2014-12-07 10:54:52.000

Quel est le problème avec ma requête? Y a-t-il une manière plus officieuse de réaliser ce que j'essaie de faire?

Essayez celui-ci si vous avez less de 1000 valeurs avec un horodatage égal

 update [vM].[dbo].[Operator] set [vM].[dbo].[Operator].Timestamp = DATEADD(MS , A.RowNumber , A.Timestamp), OperatorID = A.OperatorID , ActionID = A.ActionID , McID = A.McID , Station = A.Station , Slot = A.Slot , SubSlot = A.SubSlot, FeederID = A.FeederID, CompID = A.CompID, Description = A.Description from (SELECT (ROW_NUMBER() OVER (partition by timestamp Order by timestamp)) as RowNumber , * FROM [vM].[dbo].[Operator] WHERE DATEPART(ms,Timestamp) % 1000 = 0) as A 

Un problème peut survenir lorsque vous atteignez de grandes valeurs RowNumber