2016-02-05 83 views
0

我有代碼的一個問題,當我跑我得到無效的浮點操作電源的SQL Server

An invalid floating point operation occurred

我的代碼如下:

select POWER(ISNULL(value1,0)/NULLIF(value2,0) , 12/CONVERT(numeric(6,2),value3)) 

其中值1 (數據類型:money),value2(數據類型:money),value3(數據類型:int)是我數據庫中的列。

我得到這個錯誤,當值1 = NULL,值2 = 164083520.00和值3 = 177

怪異的是,如果我用這些數字代替我得到正確的結果,但不能同時運行這一點。

任何想法?

+1

我想這些精確值和數據類型,並沒有得到一個錯誤 –

+0

這不會給一個錯誤:DECLARE @t表(值錢,值2錢,值3 INT) INSERT @t 值(NULL,164083520.00,177) SELECT功率(ISNULL(value1,0)/ NULLIF(value2,0),12/CONVERT(數字(6,2),值3)) FROM @t –

+2

請記住,即使您有'WHERE'子句,suc h *你認爲它只是評估這些特定值的表達式,實際上並不是 - 它可能正試圖在表中的其他行上評估這個表達式...... – AakashM

回答

0

執行下面的腳本我在SQL Server 2012上沒有收到任何錯誤。AFAICT你也不會在其他版本上得到任何東西。您必須在其他地方進行計算纔會導致無效的浮點運算。

DECLARE @values TABLE(value1 MONEY,value2 MONEY,value3 INT); 
INSERT INTO @values(value1,value2,value3)VALUES(NULL,164083520.00,177); 

SELECT 
    result=POWER(ISNULL(value1,0)/NULLIF(value2,0), 12.0/CONVERT(numeric(6,2),value3)) 
FROM 
    @values; 

結果

0.00