2013-01-18 21 views
-1

我有一個存儲過程,它使用一系列臨時表來提取數據,格式並插入到一個新表中。我知道這是沒有道理的,但我試圖將空格式設置爲''(空白)或' - '破折號。這是BC。零值實際上代表了真實的平衡。當我這樣做時,我不斷收到一個錯誤,將varchar轉換爲數字。錯誤將Varchar轉換爲數值內的情況

CASE 
WHEN ##TEMPTABLE.[Summary Category Definition] = 'In Storage' THEN '' 
WHEN ##TEMPTABLE.[L/C Amount] > 0 THEN ##TEMPTABLE.[L/C Amount] 
ELSE '' 
END AS [L/C Amount] 

我曾嘗試:

CASE 
WHEN ##TEMPTABLE.[Summary Category Definition] = 'In Storage' THEN '' 
WHEN ##TEMPTABLE.[L/C Amount] > 0 THEN convert(varchar(20), ##TEMPTABLE.[L/C Amount] ) 
ELSE '' 
END AS [L/C Amount] 

是這甚至可能嗎? 謝謝你的幫助。

+0

後整個SQL語句,不僅案件 – WKordos

+1

你可以用'則IsNumeric()'試圖確定字符串是否包含轉換之前有效的數字。請注意,它有點樂觀。 (奇怪的是,標題中的轉換似乎與所顯示的SQL中的轉換相反。) – HABO

+0

什麼數據類型是您的列'[L/C Amount]'? – Lamak

回答

0

我不明白爲什麼您的查詢不應該工作,除非[L/C Amount]列實際上已經是VARCHAR。在這種情況下,你應該改變你的語句是:

CASE 
    WHEN ##TEMPTABLE.[Summary Category Definition] = 'In Storage' 
     THEN '' 
    WHEN ##TEMPTABLE.[L/C Amount] <> '0' 
     THEN CONVERT(VARCHAR(20), ##TEMPTABLE.[L/C Amount]) -- why is this necessary? 
    ELSE '' 
END AS [L/C Amount] 
+0

enitre SQL Statement是巨大的l/c數量實際上是在臨時表中,然後加載到全局臨時表中。然後,該全局臨時表將被加載到物理表中,但僅在數據被相應地格式化之後。也許全局臨時表中的字段已經是varchar。如果它已經是一個varchar我應該如何更改語句?我添加轉換器來嘗試修復錯誤,我應該將其更改爲數字而不是? – user1991167

+0

@ user1991167如果它已經是'varchar',那麼你應該嘗試我發佈在我的答案上的代碼 – Lamak

相關問題