拓跋焘撤离悬瓠后,还派人给刘义隆送了一封信。信中充满讽刺和挑衅之言,宋文帝看了非常气恼,但是他没有立即回信,因为他在谋划第二次北伐。
元嘉二十七年(450)七月,宋文帝决定兴兵北伐。为此,在全国范围内开展作战动员。上至王公、妃嫔、中央官员、地方牧守,下到普通老百姓,都要捐出金帛、谷物援助国家军事行动。尽管如此,军费还是不够,宋文帝又让扬、南徐、南兖、江四州富户借钱给军队急用,战事结束后再归还。又在青、冀、徐、豫、二兖六州以三丁取一、五丁取二的比例征召兵丁。
北伐大军兵分五路,第一路军是东路军主力水军,由青、冀二州刺史萧斌统率,王玄谟为正先锋,太子步兵校尉沈庆之、镇军咨议参军申坦等为副先锋,他们将沿黄河西进,直取碻磝;中路军由第二、三、四路军组成,第二路军由太子左卫率臧质率领进攻许昌、洛阳,第三路军由武陵王刘骏率领,第四路军由南平王刘铄率领;西路军即第五路军由雍州刺史随王刘诞指挥,率领柳元景、庞法起等从襄阳出发,进攻弘农、潼关。此外,江夏王刘义恭出镇彭城,负责各路大军的调度工作。
北伐军初期进展顺利,北魏碻磝、乐安两城守将都弃城而走,东路军占领碻磝、乐安。随后,萧斌与沈庆之镇守碻磝,让王玄谟继续西进,攻打滑台。
然而王玄谟是个空谈家,且刚愎自用,不肯听别人的劝告,史书评价其为“贪愎好杀”。宋军刚刚包围滑台时,见城中有很多茅草房,于是有人建议王玄谟火攻,王玄谟却不同意,给了城中魏军足够的时间撤掉房上茅草,掘洞而住。当时,居住在黄河、洛水沿岸的百姓都争先恐后地给宋军送粮食,还有众多百姓拿着武器来投奔,王玄谟却不让他们的首领直接领导,而是将他们拆散分给自己的亲信,以增加自己的军事实力。他给百姓每家发一匹布,却又让他们用八百个大梨来换,尽失民心。如此行军打仗,指挥军队,导致王玄谟花了三个月也没有将滑台打下来。
九月,天气转凉,拓跋焘亲自率军解救滑台。宋军听到消息后,有将士建议王玄谟用马车作为营垒,抵抗魏军骑兵,王玄谟依旧没有听从。十月,拓跋焘大军号称百万,抵达滑台。王玄谟畏惧,赶紧率军撤退,魏军乘胜追击,斩杀了上万人,宋军几乎全军覆没。
东路军统帅萧斌想要派五千士兵援助王玄谟,沈庆之说:“王玄谟士众困倦劳顿,敌人已经在近前,得有数万人才能进兵,小股军队轻率前去毫无益处。”就在二人意见无法统一之时,王玄谟逃回来了。萧斌恨其无能,要杀了他,又被沈庆之劝阻,沈庆之说:“拓跋焘统兵百万,威震天下,不是王玄谟所能抵挡的,临阵杀将只会让亲者痛仇者快。”萧斌这才没有将王玄谟处斩。
萧斌还在犹豫是否坚守碻磝,朝廷传来文帝不许退兵的命令。沈庆之却认为将在外,君命有所不受,坚持主张退军。于是萧斌留王玄谟守碻磝,自己则率军退守历城,以防魏军东进青州。不久后,因碻磝位置太过孤立突出,萧斌只好命令王玄谟撤军。
东路军战绩不佳,西路军的战况却很顺利。闰十月,柳元景、庞法起等到了卢氏县。随后,他们攻克弘农,活捉北魏弘农太守。之后,庞法起等进攻潼关,柳元景等进攻陕城。十一月,柳元景军队与北魏陕城守军展开激战,最终宋军获胜。庞法起也攻克了潼关。关中豪杰闻风而动,受尽北魏政权压迫的羌、胡各族都派人送来物资犒劳宋军,表示愿意归附。宋将梁坦、刘康祖攻克了长社,进逼虎牢。
然而由于王玄谟的失败,宋文帝认为西路军不宜单独进军,于是下诏令宋军集体班师回朝。西路军只得放弃所得城池,退守襄阳。至此,宋文帝第二次北伐以失败告终。