Ao executar uma instrução de atualização, como a abaixo, recebo um erro dizendo que
As funções com janelas podem aparecer apenas nas cláusulas SELECT ou ORDER BY.
UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])
Eu sei que isso pode ser facilmente contornado usando um cte atualizável, como abaixo
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
Minha pergunta é: existem razões para isso não ser permitido em uma declaração de atualização? Devo evitar o uso de um cte atualizável como solução alternativa?
Minha preocupação é que haja problemas ao usar funções da janela com instruções de atualização e, portanto, gostaria de entender se esse é um método aceitável ou se deve ser evitado.