宋文帝第二次北伐因东路军主力军战败被迫停止,就在宋军撤退之时,拓跋焘却率大军进行全面反攻。他派永昌王拓跋仁从洛阳向寿阳进兵,很快占领了悬瓠、项城两地。宋文帝怕寿阳失守,急召刘康祖回寿阳防守。刘康祖只有八千士兵,回防中途被拓跋仁八万大军拦截。刘康祖率军浴血奋战,双方战斗了一整天,最终宋军全军覆没。之后,拓跋仁进逼寿阳,并攻克了马头、钟离二城。
拓跋焘则亲自率主力大军攻克萧城,进逼彭城。此时刘宋江夏王刘义恭、武陵王刘骏都在彭城,刘义恭听说拓跋焘攻来,想要弃城而逃。沈庆之认为历城兵少粮多,可以长期坚守,建议二王前往历城。而沛郡太守张畅则认为如果打开城门,城中百姓必会逃散,二王也无法逃到历城去。如今彭城粮食还能暂时供应,在彭城更安全,坚决反对弃城。刘骏也表态反对弃城,誓与彭城共存亡。刘义恭这才打消了逃离的念头。
十一月底,魏太武帝拓跋焘兵临彭城。他知道彭城难攻,为了探听虚实,拓跋焘派人向刘骏索要酒和甘蔗。刘骏同意了拓跋焘的要求,并要求对方用骆驼作为回报。第二天,拓跋焘又派尚书李孝伯给宋军送去骆驼、貂裘等物,并请求与刘骏相见。刘骏派张畅接待了李孝伯,于是二人展开了一场论战,李孝伯见张畅淡定从容,言语之间毫不露怯,深感彭城难以攻破。于是魏军离开了彭城,往瓜布而去。
宋文帝也担心彭城失守,令臧质率军一万,前往彭城救援。可是刚到盱眙就遭遇了魏军主力,臧质大败,只能带领七百残兵逃往盱眙城。盱眙太守沈璞是个很有远见的人,王玄谟进攻滑台时,他就考虑到王玄谟一旦战败,与魏军对峙首当其冲的就是江淮地区。于是他早早便让人修葺城墙、储存粮食。臧质来到盱眙后,与沈璞合兵,共同守卫盱眙城。拓跋焘见盱眙城高且新,料定难攻,便没有攻打盱眙,只留下几千人马监视。
拓跋焘率军继续南下,到达长江北岸的瓜布,扬言要渡过长江。建康城内陷入了恐慌,百姓们都想要逃走。宋文帝下令戒严,并在丹阳征兵,沿江布防。这时候宋文帝才后悔不该仓皇北伐,并哀叹道:“若檀道济还在,怎会落到如此狼狈的境地!”
拓跋焘虽扬言渡江,但是他也明白,魏军少粮缺船,实际上难以渡江,北魏还不具备灭亡刘宋的条件,于是他派出使者向宋文帝提出和亲。宋文帝召集群臣商议,太子刘劭与众多大臣都同意,但江湛却反对说:“戎狄无情,这样做没有好处。”最终文帝站在了江湛这边,和亲之事只能作罢,而刘劭与江湛也结下了仇怨。
拓跋焘见和亲不成,又无法渡江,便烧毁江北房屋,掳走百姓,撤军北还。拓跋焘北还时经过盱眙,向守将臧质索要美酒,臧质却送了一壶尿给他。拓跋焘大怒,下令攻打盱眙城,还命人给臧质送了一封信,信中说:“我现在攻城的士兵都不是我鲜卑族人,而是丁零、匈奴、氐人和羌人,你杀了他们还能减少北魏的负担,对我没有任何不利之处。”臧质毫不示弱,回了一封信将拓跋焘痛骂一顿,还将拓跋焘信中的内容告诉攻城的魏军士卒,并向魏军悬赏要拓跋焘首级。拓跋焘被激怒后,更是下令全力攻城,然而魏军足足围攻了一个月,也没有打下盱眙城。这时魏军中流行瘟疫,加上魏军后路即将被切断,拓跋焘只得撤军。
此次刘宋与北魏之间的交战总体来说是刘宋战败,而北魏亦损失惨重,长期的战争拖垮了两国经济。这一战之后,北魏和刘宋都走上了由盛转衰之路。