2016-04-21 178 views
0

我有開始沒有這個遺留代碼...轉換nvarchar值'7575932'時轉換失敗。數據類型爲int

UPDATE B2C 
SET B2C.dborderid = A.order_number__c 
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

我得到這個錯誤:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '7201799-' to data type int.

我繼續將其改爲:

UPDATE B2C 
SET B2C.dborderid = (CASE 
         WHEN Isnumeric (a.order_number__c) = 1 
          THEN CAST(a.order_number__c AS INT) 
        END) 
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

而且現在我得到

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '7575932.' to data type int.

我的問題現在:

  • 我怎樣才能避免這個錯誤?我不介意比如輸掉'7575932'。 (理想情況下,我想丟棄'7575932.'值)

  • 我在盡我所能去遵循最佳實踐......正在將列DBorderid改爲nvarchar唯一的「最佳實踐」替代方案?

我使用SQL Server 2008

回答

1

代替... WHEN Isnumeric (a.order_number__c) = 1 ...使用... WHEN Isnumeric (a.order_number__c + '.0e0') = 1 ...

+0

它的工作很好,謝謝,現在我得到:消息248,級別16,狀態1,2號線nvarchar值'3545427103'的轉換溢出了一個int列。該語句已終止。是否有任何內嵌優雅/最佳實踐解決方案? – Chicago1988

+0

@ Chicago1988如何處理這種附加條件('3545427103'作爲數字(38,0))在-2147483648和2147483648之間,那麼......' – Max

+0

聽起來不錯,但不好的數據會繼續下去......所以呢最終會再次失敗......我不能相信我找不到這個簡單的東西的解決方案... – Chicago1988

相關問題