निम्न क्वेरी 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 */)
