it-swarm.asia

لماذا يلقي SQL Server خطأ تجاوز السعة الحسابي في تحويل int إلى نوع البيانات الرقمي؟

لدي خطأ يتم طرحه بواسطة SQL Server Management Studio عند تشغيل هذا الرمز:

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))

ولكن عندما أقوم بتغيير الإعلان الرقمي إلى

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))

كل شيء على ما يرام.

هل هناك قيود لنوع البيانات الرقمية؟

61
Junior M

يحدد الرقم العدد الإجمالي للأرقام ، ثم الرقم بعد العلامة العشرية.

يمكن لعدد رقمي (3،2) استيعاب ما يصل إلى 9.99 فقط.

121
Joe

لنرى ، رقمي (3،2). هذا يعني أن لديك 3 أماكن للبيانات واثنان منها على يمين العلامة العشرية تاركًا واحدًا فقط على يسار العلامة العشرية. 15 له مكانان على يسار العلامة العشرية. راجع للشغل إذا كنت قد حصلت على 100 كقيمة أود زيادة ذلك إلى رقم رقمي (5 ، 2)

27
HLGEM

NUMERIC(3,2) تعني: 3 أرقام في المجموع ، 2 بعد العلامة العشرية. لذلك لديك فقط علامة عشرية واحدة قبل العلامة العشرية.

جرب NUMERIC(5,2) - ثلاثة قبل ، اثنان بعد العلامة العشرية.

17
marc_s

غالبًا ما يساء فهم الدقة والحجم. في الرقم (3،2) ، تريد 3 أرقام بشكل عام ، لكن 2 على يمين العلامة العشرية. إذا كنت تريد 15 => 15.00 وبالتالي فإن البادئة 1 تتسبب في تجاوز السعة (حيث إن كنت تريد رقمين على يمين العلامة العشرية ، فلا يوجد سوى مساحة على اليسار لرقم واحد إضافي). مع 4.2 ، لا توجد مشكلة لأن جميع الأرقام الأربعة مناسبة.

16
Aaron Bertrand