2
ทำไม“ SELECT POWER (10.0, 38.0);” โยนข้อผิดพลาดทางคณิตศาสตร์มากเกินไป?
ฉันอัปเดตของฉันIDENTITYสคริปต์เช็คล้นไปยังบัญชีสำหรับDECIMALและNUMERIC IDENTITYคอลัมน์ เป็นส่วนหนึ่งของการตรวจสอบฉันคำนวณขนาดของช่วงชนิดข้อมูลสำหรับทุกIDENTITYคอลัมน์ ฉันใช้มันเพื่อคำนวณเปอร์เซ็นต์ของช่วงนั้นหมดไป สำหรับDECIMALและNUMERIC ขนาดของช่วงนั้นเป็น2 * 10^p - 2ที่ที่pมีความแม่นยำ ฉันสร้างกลุ่มตารางทดสอบด้วยDECIMALและNUMERIC IDENTITYคอลัมน์และพยายามคำนวณช่วงดังนี้: SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; สิ่งนี้ทำให้เกิดข้อผิดพลาดต่อไปนี้: Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. ฉัน จำกัด ให้แคบลงไปยังIDENTITYคอลัมน์ประเภทDECIMAL(38, 0)(เช่นด้วยความแม่นยำสูงสุด) ดังนั้นฉันจึงลองPOWER()คำนวณโดยตรงกับค่านั้น แบบสอบถามต่อไปนี้ทั้งหมด SELECT POWER(10.0, …