Les expressions constantes ne sont pas autorisées dans la clause ORDER BY dans les modes de compatibilité 90 ou suivants

Mise à niveau d'une database à partir de SQL Server 2014 vers SQL Server 2016. L'Assistant de mise à niveau indique que j'ai une vue qui me pose ce problème:

Object [dbo]. [View_PHistory] utilise une expression constante qui n'est pas autorisée dans la clause ORDER BY dans le niveau de compatibilité de database 90 ou version ultérieure.

Les expressions constantes sont autorisées (et ignorées) dans la clause ORDER BY lorsque le mode de compatibilité de la database est défini sur 80 et plus tôt. Toutefois, ces expressions dans la clause ORDER BY entraîneront l'échec de l'instruction lorsque le mode de compatibilité de database est défini sur 90 ou version ultérieure.

Voici un exemple de telles déclarations problématiques:

SELECT * FROM Production.Product ORDRE PAR CAS 1 = 2 ALORS 3 ELSE 2 FIN "

Avant de modifier le mode de compatibilité de database à 90 ou ultérieure, modifiez les instructions qui utilisent des expressions constantes dans la clause ORDER BY pour utiliser un nom de colonne ou un alias de colonne ou un entier non négatif représentant la position du nom ou de l'alias.

C'est mon sharepoint vue:

ALTER VIEW [dbo].[vw_PHistory] AS SELECT table1.SerialNo, ROW_NUMBER() OVER (PARTITION BY table1.SerialNo ORDER BY DATEADD(ms, table2.TimeStamp, table3.RegTime) DESC) AS LatestPoll FROM table1 INNER JOIN table2 ON table2.SerialNo = table1.SerialNo AND table2.Counted = 1 LEFT OUTER JOIN table3 ON table3.scanID = table2.scanID 

Cette vue n'a aucun problème sur SQL Server 2014 dont le niveau de compatibilité est de 120.

Lorsque ORDER BY DATEADD fonction ORDER BY DATEADD avec un nom de colonne spécifique, l'invite d'erreur par le conseiller de mise à niveau disparaît.

De plus, je sais que la fonction DATEADD ne returnne pas une expression constante. Je n'ai aucune idée pourquoi cette erreur est soulevée. J'ai été googling pour les 2 derniers jours.

Quelqu'un veut-il m'éclairer?

Merci d'avance. Très appréciée.

Edit: TimeStamp est int, RegTime est dateTime, par exemple 2009-12-08 17: 23: 36.267

Je crois que le problème est LEFT OUTER JOIN à table3 et l'utilisation de table3.RegTime dans la clause ORDER BY . Si RegTime est NULL, l'expression sera une constante et ne peut pas être évaluée.