แบบสอบถามต่อไปนี้ดำเนินการแบบหน้าต่างSUMเหนือตาราง columnstore ด้วย1500 total rowsซึ่งแต่ละอันมีค่า 0 หรือ 1 และมัน overflows INTชนิดข้อมูล ทำไมสิ่งนี้จึงเกิดขึ้น
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.
สคริปต์เต็ม
ดูไฟล์นี้สำหรับสคริปต์การทำสำเนาที่มีอยู่อย่างสมบูรณ์
แผนแบบสอบถาม
นี่คือแผนการสืบค้นที่ประเมินหมายเหตุแบบย่อ ( XML แบบเต็มบนวางแผน )
แบบสอบถามที่คล้ายกันซึ่งดำเนินการสำเร็จ
หากทำการแก้ไขใด ๆ ต่อไปนี้ข้อผิดพลาดจะไม่เกิดขึ้น:
- ใช้การตั้งค่าสถานะการสืบค้นกลับ
8649เพื่อเลือกแผนการขนานโดยไม่คำนึงถึงขีด จำกัด ต้นทุนสำหรับการขนาน - ใช้การตั้งค่าสถานะติดตาม
9453เพื่อปิดใช้งานโหมดแบตช์ - ใช้
COUNTฟังก์ชันการรวมแทนSUMฟังก์ชัน - ลบ
WHERE x.rank = 1คำกริยา
ตัวอย่างเช่นแบบสอบถามนี้ดำเนินการสำเร็จ:
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 */)
