簡體   English   中英

在存儲過程中將varchar轉換為數值類型的算術溢出錯誤

[英]Arithmetic overflow error converting varchar to data type numeric in stored procedure

我收到將varchar轉換為數值數據類型的算術溢出錯誤。 在我的存儲過程中,雖然只有在必須進行計算時。 這是我的代碼,我使用的轉換似乎還是有問題。

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar,100 *((s.ATF *1.00) /     
(s.Total * 1.00))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10)

感謝名單!

問題是您將一個varchar乘以一個數值。 這將強制將隱式轉換為數字類型。 您應該明確指定轉換。 我選擇了decimal(38,6)但是您可以更改它。

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar, 100 * cast(s.ATF as decimal(38,6)) /     
cast(s.Total as decimal(38,6))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10)

您可以在該簡單示例上看到這種錯誤轉換的工作方式:

declare @x as varchar(50) = '11'
select @x * 1.00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM