Lors de l'exécution d'une instruction de mise à jour, comme celle ci-dessous, j'obtiens une erreur me disant que
Les fonctions fenêtrées ne peuvent apparaître que dans les clauses SELECT ou ORDER BY.
UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])
Je sais que cela peut être facilement résolu en utilisant un cte pouvant être mis à jour, comme ci-dessous
WITH my_cte AS (
SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag
FROM Dim_Chart_of_Account
)
UPDATE my_cte
SET [Account_Order] = acc_order_lag
Ma question est, y a-t-il des raisons pour lesquelles cela n'est pas autorisé dans une déclaration de mise à jour, devrais-je éviter d'utiliser un cte pouvant être mis à jour comme solution de contournement?
Ma préoccupation est qu'il y a des problèmes lors de l'utilisation des fonctions de fenêtre avec des instructions de mise à jour et je voudrais donc comprendre si c'est une méthode acceptable ou si elle doit être évitée.