निम्न क्वेरी SUM
किसी स्तंभ की तालिका के साथ एक विंडो प्रदर्शित करती है 1500 total rows
, जिसमें से प्रत्येक का मान 0 या 1 है, और यह 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.
पूरी स्क्रिप्ट
पूरी तरह से निहित प्रजनन स्क्रिप्ट के लिए इस फ़ाइल को देखें।
क्वेरी योजना
यहां एक एनोटेट अनुमानित क्वेरी प्लान ( पेस्ट प्लान पर पूर्ण एक्सएमएल ) है।
इसी तरह के प्रश्न जो सफलतापूर्वक निष्पादित होते हैं
यदि निम्न में से कोई संशोधन किया जाता है, तो त्रुटि उत्पन्न नहीं होती है:
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 */)