Khi chạy một câu lệnh cập nhật, chẳng hạn như câu lệnh dưới đây, tôi gặp lỗi khi nói với tôi rằng
Các hàm cửa sổ chỉ có thể xuất hiện trong các mệnh đề CHỌN hoặc ĐẶT HÀNG B BYNG mệnh đề.
UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])
Tôi biết rằng điều này có thể dễ dàng làm việc xung quanh bằng cách sử dụng một cte có thể cập nhật, như dưới đây
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
Câu hỏi của tôi là, có bất kỳ lý do tại sao điều này không được phép trong một tuyên bố cập nhật, tôi có nên tránh sử dụng một cte cập nhật như một cách giải quyết không?
Mối quan tâm của tôi là có vấn đề khi sử dụng các chức năng của cửa sổ với các câu lệnh cập nhật và do đó tôi muốn hiểu liệu đây có phải là một phương pháp có thể chấp nhận hay nên tránh.