淺談Oracle與SQL Server對(duì)Update語(yǔ)句的處理
在數(shù)據(jù)庫(kù)操作中,我們經(jīng)常使用Update語(yǔ)句對(duì)表進(jìn)行修改、更新等。但是不同的數(shù)據(jù)庫(kù)在對(duì)Update語(yǔ)句的處理過程可能也是不同的。本文我們主要介紹一下Oracle和SQL Server在處理Update語(yǔ)句時(shí)的不同,接下來就讓我們來一起學(xué)習(xí)一下吧。
Oracle和SQL Server對(duì)Update語(yǔ)句的處理是不同的。同樣的寫法執(zhí)行出來的結(jié)果會(huì)不一樣,如果你使用慣了Oracle的話,你需要注意下。在復(fù)雜的Update語(yǔ)句中,Oracle一般用子查詢來實(shí)現(xiàn)。比如:
- update table1 t1
- set c1=(select t2.c1 from table2 t2 where t1.c2=t2.c2)
當(dāng)然,如果單純的將該語(yǔ)句復(fù)制到sqlserver 中運(yùn)行的話會(huì)提示語(yǔ)法錯(cuò)誤:
行一出現(xiàn)語(yǔ)法錯(cuò)誤
這個(gè)時(shí)候你可能會(huì)想既然不支持別名的話,直接用表名好了,修改語(yǔ)句為:
- update table1
- set c1=(select t2.c1 from table2 t2 where table1.c2=t2.c2)
這個(gè)語(yǔ)句確實(shí)在sqlserver中能運(yùn)行,如果你真的運(yùn)行了它,你就會(huì)悲劇了。因?yàn)閠able1中所有的記錄都被更新過,而且一部分本不需要更的記錄被更新成了null,而不是像oracle中只對(duì)符合子查詢的記錄進(jìn)行更新。sqlserver中怎么來對(duì)這種情況進(jìn)行更新的呢?答案是update from。
在sqlserver中要正常對(duì)這種情況進(jìn)行處理的話,需要將上述sql語(yǔ)句進(jìn)行修改,修改后的sql如下:
- update table1
- set c1=t2.c2
- from table2 t2
- where c2=t2.c1
關(guān)于Oracle與SQL Server對(duì)Update語(yǔ)句的處理過程就介紹到這里,希望本次的介紹能夠帶給您一些收獲!
【編輯推薦】






