Truy vấn sau đây thực hiện một cửa sổ SUMtrên bảng cột 1500 total rows, mỗi bảng có giá trị 0 hoặc 1 và nó tràn ra INTkiểu dữ liệu. Tại sao chuyện này đang xảy ra?
SELECT a, p, s, v, m, n,
SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
SELECT a, p, s, v, m, n,
RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
FROM #t /* A columnstore table with 1,500 rows */
) x
WHERE x.rank = 1
--Msg 8115, Level 16, State 2, Line 1521
--Arithmetic overflow error converting expression to data type int.
Kịch bản đầy đủ
Xem tập tin này cho một kịch bản sao chép đầy đủ.
Kế hoạch truy vấn
Đây là một kế hoạch truy vấn ước tính có chú thích ( XML đầy đủ khi Dán Kế hoạch ).
Các truy vấn tương tự thực hiện thành công
Nếu bất kỳ sửa đổi nào sau đây được thực hiện, lỗi không xảy ra:
- Sử dụng cờ theo dõi
8649để thích một kế hoạch song song bất kể ngưỡng chi phí cho song song - Sử dụng cờ theo dõi
9453để tắt chế độ hàng loạt - Sử dụng
COUNThàm tổng hợp thay choSUMhàm - Xóa
WHERE x.rank = 1vị ngữ
Ví dụ: truy vấn này thực hiện thành công:
SELECT a, p, s, v, m, n,
SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
SELECT a, p, s, v, m, n,
RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
FROM #t /* A columnstore table with 1,500 rows */
) x
WHERE x.rank = 1
OPTION (QUERYTRACEON 9453/* Disable batch mode */)
