這幾天在做一個導數據的功能,從老的數據庫中把數據導入到新設計的數據庫表中,遇到一個很奇怪的問題,就是標題的“Number (257) Severity (16) State (1) Server (oldsp) Implicit conversion from datatype 'INT' to 'VARCHAR' is not allowed. Use the CONVERT function to run this query.”這種錯誤提示。
我是用的insert into xx (x1,x2...) select x1,x2 from olddb.xx這種語句導入的。測試很多次,一直報這個錯誤。對比了兩個表的字段類型,也反覆只插入其它幾個字段,仍然報錯,找了幾個同事來幫忙看問題,同樣沒有找到錯誤原因,字段對比無數次,差一點就放棄了。
然後在網上到處搜資料,發現有人遇到過同樣的問題,就是字段的默認值問題。這個問題可能是Sybase自己沒有注意到的,不知道算不算一個bug,就是在建表或字段的時候,默認值與字段類型並未校驗正確性,比如你建一個varchar的字段,但是默認值給的0,而不是'0',字段可以建成功,但是你插入數據的時候問題就來了,總會提示剛才那個類型轉換的錯誤。
把字段默認值0改為'0',即字符型的0,再測試插入數據,成功了。
這個問題可能很多人都遇到過吧,寫下來自己保留以便以後用得上。