魏惠王聞訊楚懷王大軍進擊睢寧,一麵割讓民權(現河南民權縣)、曹縣(現山東南部曹縣)於齊國,請求齊威王派兵救援,一麵令大梁十萬魏軍開拔、奔救襄陵。齊威王接到魏王求救書,隨召集文武大臣議事:“楚懷王親率二十萬精兵伐魏,現已到襄陵。魏惠王割讓民權、曹縣兩縣於寡人,請求寡人出兵解救襄陵之困,眾卿家以為如何”?有臣奏:“楚懷王自繼位以來,西擊蜀、定巫巴、敗秦師、定漢中、討韓伐魏、立定伊川,戰績顯揚,其勢正盛,不可以在這個時候和他對決”。又有臣奏:“臣以為,楚懷王西征北討,年年征戰,楚師早已疲倦。今大王舉十萬大軍南下,合大梁的十萬魏軍則為二十萬了,就算不能取勝,楚軍也就取不到襄陵了。況且襄陵的戰略位置非常重要,楚軍攻取了襄陵,明在攻伐魏國,實是打通攻打齊國的要道和對宋國實行合圍,大王可約宋國出兵寧陵,形成對楚軍的三麵夾擊”。齊威王:“善!”隨親率大軍十五萬(馬軍三萬、步軍十二萬)出淄博、過濟南、南下支援魏軍。
楚懷王聞訊,隨即召集三軍將領:“齊軍十五萬,需十五日才能到達襄陵,而大梁的魏軍三日便可到達,齊軍未到,宋軍不敢到寧陵支援魏軍。因此,必須在七日內攻下襄陵、寧陵,然後揮師北上,擊敗齊軍。三軍將領聽令:令昭陽率八萬(馬、步軍各四萬)大軍火攻占杞城(現河南杞縣),攔截大梁來援的魏軍,又令一大將率三萬楚軍(馬軍一萬、步軍二萬)駐紮於襄陵、寧陵之間的陽驛(鄉,寧陵縣西十裏處),攔截寧陵的二萬魏軍趕來支援襄陵,其餘的九萬楚軍務必於五日內攻下襄陵,不得有誤。”於是,楚軍立即向襄陵、杞城起總攻擊。
杞城離襄陵有四十裏,離大梁有六十裏路,有一萬魏軍把守。襄陵(睢縣)有三萬魏軍把守,寧陵(縣)有二萬魏軍把守。昭陽率著四萬楚軍騎兵一個時就到達杞縣,連續不斷地向杞城起猛烈的攻擊,而楚軍的步軍是在三時後才全部到達杞縣的。等到楚軍步軍全部到達,這時的杞城已經被楚將昭陽連續攻打了二個時。楚軍的四萬步軍一到,一個時後杞縣的城門就被撞開,守城的一萬魏軍全部被斬殺。其實,大梁魏軍的二萬先頭騎兵在昭陽騎兵到達杞縣的一個時後也就趕到,但被昭陽用三萬騎兵擊敗潰散,不敢靠近杞城。等到大梁魏軍的八萬步軍趕到,昭陽已攻下杞城二個時了。這時,昭陽的四萬騎兵,四萬步兵早已在城外嚴陣以待。
大梁的十萬(馬軍二萬五千、步軍七萬五千)魏軍救兵急急趕到杞縣,於西十裏鋪、惠濟河(現杞縣西北十裏處)一帶與昭陽的八萬楚軍相遇。魏軍的總數雖然多了二萬,但卻少了一萬五千騎兵,這正是楚懷王克敵製勝的妙法。因為攻打襄陵城,馬軍多則用不上,在野外平地衝殺,馬軍與步軍相比,以一當三,故將六萬馬軍撥四萬給昭陽,抽出二萬步軍,以絕對優勢在最短的時間內拔掉襄陵城。魏軍二萬騎兵剛剛被昭陽的楚軍騎兵擊逃,心有餘悸。昭陽一見魏軍走近,既不等其列陣,也不問話,即令三萬騎兵攻殺魏軍騎兵,一萬騎兵衝擊魏軍步兵,四萬步兵列陣前進,撲殺魏軍步兵,並令杞縣城上的楚軍戰鼓助威。
隻聽楚軍戰鼓擂響,昭陽率三萬騎兵疾向魏軍騎兵奔殺過去,一萬楚軍騎兵則疾繞過魏軍騎兵從側麵蕩擊魏軍步兵,四萬步兵則迅向魏軍步兵撲殺過去。魏軍將領見狀,急令列陣,可那裏來得及呀!魏軍步兵剛要列陣,楚軍騎兵已經從側麵衝殺過來了,魏軍騎兵想要去攔截,正麵三萬楚軍騎兵已奔殺過來,隻好倉促應戰。魏軍步兵雖多,但尚未列陣,被楚軍一萬鐵騎一衝,頓時大亂,楚軍的一萬鐵騎來回衝擊,左衝右蕩,如入無人之境,魏軍步兵死傷嚴重。魏軍的二萬五千騎兵與楚軍三萬騎兵戰於一塊,魏軍騎兵新敗、心有餘悸,且比楚軍騎兵少五千;楚軍新勝,鬥誌正旺,且比魏軍騎兵多五千。
雙方一接戰,魏軍騎兵便被打得七零八落,沒一會就難以支撐了,魏軍的步兵想趕過來增援騎兵,楚軍步兵又潮水般撲殺過來。魏軍將領見狀,知道大勢不妙,一旦魏軍騎兵潰敗,楚軍的三萬鐵騎就會乘勢衝殺魏軍步兵,那時就得全線潰敗。於是,魏軍將領急急下令撤退,楚軍乘勢掩殺八裏至楚寨方回,魏軍大敗而逃至趙寨(離楚寨十五裏)後方才重新集結。
這一戰,昭陽八萬楚軍斬殺魏軍三萬五千(馬軍七千、步軍二萬八千),連同杞縣一萬魏軍守軍共四萬五千,繳獲戰馬七千匹,盔甲兵器四萬套,糧草輕重一大批。昭陽將糧草輕重、盔甲兵器全部運回杞縣,七千步兵換乘戰馬變成騎兵,變成四萬七千騎兵。隨後,令三萬騎兵趕回襄陵(睢縣)向楚懷王複命,自己親率五萬楚軍(一萬七千騎兵、三萬三千步兵)固守杞縣,攔截來援魏軍。而魏軍在趙寨重新集結後的軍隊隻剩六萬三千(馬軍一萬八千、步軍四萬五千),其中還有三千受傷的,因此,不敢再進攻杞縣,隻好等待齊國大軍到來。