运行更新语句(例如下面的语句)时,我收到一条错误消息,告诉我
窗口函数只能出现在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作为解决方法吗?
我担心的是,将窗口函数与更新语句一起使用时会出现问题,因此,我想了解这是一种可接受的方法还是应该避免。
1
可更新的CTE可以接受并且很好。不知道为什么不允许在UPDATE中使用它。
—
ypercubeᵀᴹ
也许是万圣节的某种保护?
—
亚伦·伯特兰