2013-12-11 99 views
1

我有一個動態SQL SP,它動態創建表。SQL Server浮點數據類型行爲

,這種動態SP A特定的查詢產生被給定爲:

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0' 

注意,列[RATE]Float類型。

但是,對於其中[RATE]列的類型爲Int的另一個動態創建的表,該查詢失敗。我明白這是因爲參數周圍的單引號。

這種行爲差異的原因是什麼?

回答

1

您正在強制進行隱式轉換以使數據類型匹配。這全是關於type precedence

對於float列,我們有數據類型floatvarcharfloat獲勝,我們試圖將'0.0''10.0'轉換爲floats並獲得成功。

對於int列,我們有數據類型intvarcharint獲勝,我們嘗試將'0.0''10.0'轉換爲int s並失敗。

沒有引號,對於int列,我們有數據類型intdecimaldecimal獲勝,我們嘗試將int列值轉換爲decimal併成功。

0

嘗試轉換/施放的值 '0.0' 和'10 0.0' 爲int

爲[速率]是浮法

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0' 

爲[速率]爲int

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN convert(int, '0.0') AND convert(int, '10.0')' 

SELECT * FROM [DYNAMIC_TABLE] WHERE convert(float, [RATE]) BETWEEN '0.0' AND '10.0' 
+0

你的是一個修復,但上面的一個是答案佛它。 –