同一個查詢語法,MS SQL 2005與Oracle回傳的結果不同.
今天一早就收到系統寄來的錯誤訊息通知,一看之下,那不是我上週才上線的嗎?而且錯誤訊息是PK重覆,怎麼可能會發生這樣嚴重的程式撰寫錯誤,第一個直覺就是查看資料庫裡的資料,這程式會同時連往Oracle及MS SQL2005兩種不同的資料庫,進行資料的維護更新,看啊看到,發現資料庫裡的資料"不乾淨",資料的後面跟了空白字串,例如 : "TEST ",正常來說,資料庫裡的資料應該都是Trim過才放進去的,怎麼會有這樣的資料存在.
這資料是問題之一,但最後發現一個更怪的情況,同一樣SQL語法,Oracle與MS SQL會有不同的結果,但我個人覺得,Oracle才是合理的結果,MS SQL(SQL 2005)是不對的,以Oracle來說 'TEST' <> 'TEST ',但MS SQL就神奇了,'TEST' = 'TEST ',它自動幫我Trim,這法範例如下 :
EX1:
select * from testTB where UsrName='TEST'
這個Oracle與MS SQL回傳的結果一樣
EX2:
select * from testTB where UsrName='TEST '
Oracle會因為TEST後面多了空白字串,而找不到資料.
MS SQL因為它會自動Trim,結果會同EX1.
因為這樣的結果,才導致我PK重覆的錯誤.本來很想再查下去,可是沒權限去碰資料庫,只好放棄,只能說,學到經驗了,下次對MS SQL要注意這種問題.