2012-08-01 99 views
0

我查詢數據庫中,我得到以下異常:轉換VARCHAR值時SQL Server的轉換失敗

轉換失敗「B6UJ978023EC」到的數據類型爲int

如何解決它?

+4

什麼是您正在運行的查詢? – ChrisBint 2012-08-01 09:26:05

+0

您可能試圖連接varchars和ints,在這種情況下,Sql Server會嘗試將varchars轉換爲int。使用'convert'來防止它。 – 2012-08-01 09:27:28

+0

-1。 「我的猜測是...」和「你可能......」應該向你清楚地表明你沒有提供足夠的信息讓問題能夠被精確地回答。你的問題的當前形式聽起來很像「我正在編寫一個程序,並且我得到錯誤消息'xyz沒有被定義爲變量或參數',我該如何解決它?」。 – 2012-08-01 14:05:56

回答

0

試試這個:

錯誤是因爲你正試圖轉換一個字符值到整數值。只需添加以下條件的查詢,以便它會選擇只整數值

where ISNUMERIC(col+ '.0e0')=1 
+0

如果查詢的其餘部分包含一個計算值,該值也應該包括用這個排除的行。我會解決這個問題,而不是解決它。 – ChrisBint 2012-08-01 09:35:39

+0

ISNUMERIC函數將解決您的問題 – 2012-08-01 09:35:52

+0

@shatrughna。不,它會排除可能只有數據不正確的行。例如,這是您的時間表,並且您從每行計算得到的每個小時都得到報酬,但其中一行的數據不正確,現在正在從計算中排除。這是正確的解決方案嗎?沒有。解決問題(不正確的數據),不要解決它。 – ChrisBint 2012-08-01 09:39:31

3

我的猜測是,您的查詢看起來是這樣的:

select * from mytable where SomeField = 'B6UJ978023EC' 

如果是這樣的話,SomeField被宣佈爲一個INT數據類型和Sql Server正在嘗試將'B6UJ978023EC'轉換爲INT,這將無法正常工作。

您可能試圖執行插入/更新操作,因此如果SomeField是INT,則這不起作用。

update mytable 
    set SomeField = 'B6UJ978023EC' 
where something = something 

insert mytable (field1, field2, SomeField) 
values(123, 'abc', 'B6UJ978023EC') 

同樣的結果,轉換轉換VARCHAR值時失敗「B6UJ978023EC」爲數據類型int

在這種情況下,無論是改變列的數據類型,或改變它的變量的值。

更新

如果列的數據類型是(N)VARCHAR但包含一些實數,那麼你可以簡單地添加在你身邊正在尋找數單引號。

-- works 
select * from mytable where SomeField = '123456' 

-- doesn't work - same error 
select * from mytable where SomeField = 123456 
+0

它也可能是另一種方式:如果'SomeField'是一個'varchar' /'nvarchar'字段,如果你從mytable中選擇* whereField = 1'(搜索一個數值),你會得到同樣的錯誤。並且表中至少有一行具有非數字值。 – 2012-08-01 09:44:43

+0

@ChristianSpecht - 是。 – 2012-08-01 09:52:57

+0

有什麼可以解決的?到這個 – RHM 2012-08-01 10:54:01