Kueri berikut melakukan windowed di SUM
atas tabelstore dengan 1500 total rows
, masing-masing memiliki nilai 0 atau 1, dan melimpahi INT
tipe data. Mengapa ini terjadi?
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.
Skrip lengkap
Lihat file ini untuk skrip reproduksi yang lengkap.
Rencana kueri
Berikut adalah perkiraan rencana kueri beranotasi ( XML lengkap tentang Tempel Paket ).
Kueri serupa yang berhasil dieksekusi
Jika salah satu dari modifikasi berikut dilakukan, kesalahan tidak terjadi:
- Gunakan tanda jejak
8649
untuk memilih rencana paralel terlepas dari ambang biaya untuk paralelisme - Gunakan tanda jejak
9453
untuk menonaktifkan mode batch - Gunakan
COUNT
fungsi agregasi alih-alihSUM
fungsi - Hapus
WHERE x.rank = 1
predikat
Misalnya, kueri ini dijalankan dengan sukses:
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 */)
sumber