При выполнении оператора обновления, такого как приведенный ниже, я получаю сообщение об ошибке, сообщающее, что
Оконные функции могут появляться только в предложениях SELECT или ORDER BY.
UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])
Я знаю, что это можно легко обойти, используя обновляемый cte, как показано ниже
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
Мой вопрос: есть ли причины, по которым это не разрешено в операторе обновления, следует ли мне избегать использования обновляемого cte в качестве обходного пути?
Меня беспокоит то, что существуют проблемы при использовании оконных функций с операторами обновления, и поэтому я хотел бы понять, является ли это приемлемым методом или его следует избегать.