এসকিউএল সার্ভার "গাণিতিক ওভারফ্লো ত্রুটিটি এক্সপ্রেশনটিকে ডেটা টাইপ ইনটে রূপান্তর করে returns"


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
এসকিউএল সার্ভার স্বয়ংক্রিয়ভাবে ইনট থেকে বিগিন্টে প্রচার করে না? # টিআইএল তাই যদি আপনি সংক্ষিপ্ত বিবরণটি হতে পারেন তবে এটি আপনাকে বড় মানতে হবে CONVERT()। সুন্দর।
ইভান ক্যারল

এই প্রশ্নে আপনার উদাহরণ কীভাবে কাজ করেছিল এবং আমার তখন কাজ করে না? এটা আপনার উত্তর?
ইভান ক্যারল

পুনঃটুইট আমি মনে করি এটি সম্ভব যে এলোমেলো মান বিতরণ আলাদা ছিল এবং খনিতে পরিণত হওয়ার পক্ষে আমার যথেষ্ট পরিমাণ কম ছিল BIGINT। যদিও এটি আমার সেরা অনুমান সম্পর্কে।
এরিক ডার্লিং

@ ইভানক্রোল আমি পল ডব্লিউ এর সাথে আরও দক্ষ উদাহরণ সহ এটি নিয়ে কথা বলার পরে একটি ডিবিফিডাল লিখেছি, কেবল লক্ষ্য করুন যে এটি বিভাজনীয় প্রয়োজনীয়তার কারণে ডিবিফিডালে চলবে না: ডিবিফিডাল.উক_..
এরিক ডার্লিং

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.