Truy vấn sau đây thực hiện một cửa sổ SUM
trên bảng cột 1500 total rows
, mỗi bảng có giá trị 0 hoặc 1 và nó tràn ra INT
kiể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
COUNT
hàm tổng hợp thay choSUM
hàm - Xóa
WHERE x.rank = 1
vị 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 */)