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