我做了SELECT
它使用CASE
到nvarchar的值轉換成合適的類型,像這樣:話,那麼從句始終評估
SELECT CASE
WHEN @propType = 'money' THEN convert(money, datavalue)
[...]
ELSE datavalue
END
FROM [...]
然而,似乎總是執行convert
,即使@propType
是不是等於錢。可運行的示例:
declare @proptype nvarchar(50)= 'nvarchar'
declare @val nvarchar(10) = 'test'
select
case @proptype
when 'money' then convert(money, @val)
else @val
end
爲什麼是這樣的,我該如何解決它? MSDN文檔說明如下:
CASE語句按順序評估其條件,並在條件滿足的第一個條件下停止 。在某些 的情況下,在CASE語句 接收表達式的結果作爲其輸入之前評估表達式。在 評估這些表達式的錯誤是可能的。首先評估 出現在CASE語句的WHEN參數中的聚合表達式,然後提供給CASE語句的 。例如,當生成MAX 聚合的值時,以下查詢 會產生除零錯誤。這發生在評估CASE表達式之前。
我不確定這是否相關,但語言對於非本地語言有些沉重,所以也許它是?
的'varchar'明確地轉換爲'money'時,它的隱含轉換回'varchar'的唯一目的是,據我所知,它們的目的,爲什麼不你要麼把它存儲在所要求的格式開始與或讓客戶端處理格式? – 2012-08-10 09:10:55
源數據不在我的控制之下。在實際情況下,我必須跳過不少箍環才能將數據轉換爲可以插入報表中的格式(這是正確的類型) – carlpett 2012-08-10 09:49:20