SQL सर्वर रिटर्न "अंकगणित अतिप्रवाह त्रुटि अभिव्यक्ति को डेटा प्रकार int में परिवर्तित करना।"


19

जब मैं इस कमांड को चलाता हूं SUM()

SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;

मैं ला रहा हूँ,

Arithmetic overflow error converting expression to data type int.

इसका कारण क्या है इस पर कोई विचार?

मैं इस उत्तर में निर्देशों का पालन कर रहा हूं ।

जवाबों:


25

INTअधिकतम (2,147,483,647) से बड़े मूल्यों के लिए , आप COUNT_BIG (*) का उपयोग करना चाहेंगे ।

SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;

यदि यह हो रहा है SUM, तो आपको Amountएक में बदलने की आवश्यकता है BIGINT

SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;

2
SQL सर्वर स्वतः int से bigint को बढ़ावा नहीं देता है? #TIL तो अगर आप योग कर रहे हैं कि बिगिंट हो सकता है, तो आपको मूल्य को लपेटने की आवश्यकता है CONVERT()। सुंदर।
इवान कैरोल

उस सवाल पर आपका उदाहरण कैसे काम करता है, और मेरा काम नहीं किया? यह आपका जवाब है?
इवान कैरोल

@EvanCarroll मुझे यकीन नहीं है! मुझे लगता है कि यह संभव है कि यादृच्छिक मूल्य वितरण अलग था और मेरा कम होना काफी कम हो गया था BIGINT। हालांकि मेरा सबसे अच्छा अनुमान है।
एरिक डार्लिंग

@EvanCarroll मैं एक अधिक कुशल उदाहरण के साथ पॉल डब्ल्यू के साथ इसके बारे में बात करने के बाद एक dbfiddle लिखा था, बस ध्यान दें कि यह विभाजन आवश्यकताओं की वजह से dbfiddle पर नहीं चलेंगे: dbfiddle.uk/...
एरिक डार्लिंग

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.