แบบสอบถามต่อไปนี้ดำเนินการแบบหน้าต่าง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 */)