2013-10-08 60 views
0

我有權訪問兩個數據庫,它們應該是彼此的副本。在這兩個表上都有一個名爲GROUP的表,其中列GROUP_INVOICE_NUMBER (varchar(20), not null)什麼設置會影響隱式轉換?

在第一個數據庫中,我可以執行:

select * 
from GROUP 
where GROUP_INVOICE_NUMBER = 4 

這excecutes罰款。然而在第二,我得到:

消息245,級別16,狀態1,行轉換 當VARCHAR值「1626CR2」到的數據類型爲int 1個轉換失敗。

我知道這兩個數據庫實例之間必須有區別,而且我猜測它們是關於隱式轉換和/或警告級別的。

你認爲這個區別在哪裏?

注:

我明白這是可怕數據庫設計,但我們一直在亂堆着,我們正在努力提高(因此,我們需要創建一個測試環境)遺留系統我們在哪裏看到這個問題。

回答

0

區別在於第二個數據庫的列中的數據不是數字,因此根本無法進行implict轉換。在任何情況下,你都不應該依賴隱式翻版。要麼正確存儲數據,要麼進行顯式轉換。 這應該在兩個工作:

select * 
from GROUP 
where GROUP_INVOICE_NUMBER = '4' 
+0

我想你誤解了我的問題,無論是列'VARCHAR(20),不null' –

+0

@ m.edmondson,這是什麼有什麼關係呢?你是否嘗試過建議的更改?當列中的數據不能100%轉換爲Int時,不能將其隱式轉換爲int。 – HLGEM

+1

這兩個數據庫_應該是相同的,你是說數據本身是不同的**不是**導致這個問題的數據類型?把單引號放在4上就行,但這不是我要問的問題。 –

1

這是因爲在其中錯誤沒有示出數據庫僅包含在列GROUP_INVOICE_NUMBER.That整數值是指列值不包含這樣的字母數字characters.Try:

select * 
from GROUP 
where GROUP_INVOICE_NUMBER = '4' 
+0

在使用Varchar列的條件時,我們不能直接指定值,而是在單引號中添加它。 –

相關問題