我有一個動態SQL SP,它動態創建表。SQL Server浮點數據類型行爲
,這種動態SP A特定的查詢產生被給定爲:
SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'
注意,列[RATE]
是Float
類型。
但是,對於其中[RATE]
列的類型爲Int
的另一個動態創建的表,該查詢失敗。我明白這是因爲參數周圍的單引號。
這種行爲差異的原因是什麼?
我有一個動態SQL SP,它動態創建表。SQL Server浮點數據類型行爲
,這種動態SP A特定的查詢產生被給定爲:
SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'
注意,列[RATE]
是Float
類型。
但是,對於其中[RATE]
列的類型爲Int
的另一個動態創建的表,該查詢失敗。我明白這是因爲參數周圍的單引號。
這種行爲差異的原因是什麼?
您正在強制進行隱式轉換以使數據類型匹配。這全是關於type precedence
對於float
列,我們有數據類型float
和varchar
。 float
獲勝,我們試圖將'0.0'
和'10.0'
轉換爲float
s並獲得成功。
對於int
列,我們有數據類型int
和varchar
。 int
獲勝,我們嘗試將'0.0'
和'10.0'
轉換爲int
s並失敗。
沒有引號,對於int
列,我們有數據類型int
和decimal
。 decimal
獲勝,我們嘗試將int
列值轉換爲decimal
併成功。
嘗試轉換/施放的值 '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'
你的是一個修復,但上面的一個是答案佛它。 –