自从第一次幽州之战失利以来,赵光义一直郁结于心,为了挽回自己“圣主明君”的名声,他长期以来处心积虑图谋再攻幽州。986年,贺令图、贺怀浦、薛继昭、刘文裕等人先后上言,以为“自国家伐太原而契丹渝盟发兵以援之,非天威兵力决而取之,河东之师几为迁延之役,且契丹主年幼,国事决于其母,其大将韩德让宠幸用事,国人疾之,请乘其釁以取幽蓟。”贺怀浦是赵匡胤元配孝惠皇后的胞兄,一向深得信任,赵光义随即召集群臣会商。其实,贺令图等人所言虽然道听途说的成分居多,但韩匡嗣、韩德让父子得到萧绰的宠信,在辽国专权横行也是事实,辽国涿州刺史耶律虎古小有过错,就被韩德让用骨杂击脑而死,群臣无人敢问,但并未发展到“国人疾之”的地步。
此前,赵光义在与群臣商议幽州形势时,就曾说过:“幽州四面平川,无险固守,难于控扼,异时收复燕蓟,当于古北口诸隘据其要害,不过三五处,屯兵设堡寨,自绝南牧矣。”当时,宋琪回答道:“范阳前代屯兵之地,古北口及松亭关、野狐门三路并立堡寨,至今石垒基堞尚存,将来止于此数处置戍可矣。”可见,燕云十六州始终是北宋君臣的一块心病,现在虽然争论不下,但赵光义的决心已经不可动摇。
公元986年1月,赵光义正式下达了收复燕云十六州的命令,宋军分三路出击:东路以天平军节度使曹彬为幽州道行营前军马步水陆都部署,河阳节度使崔彦进为副,率大军十余万人自保州向涿州攻击前进,这一带地形比较平坦;以马军都指挥使米信为幽州西北道行营马步军都部署,代州观察使杜彦圭为副,率兵经雄州出发直向新城;中路以步军都指挥使田重进为定州路都部署,蕲州刺史谭延美为副,率军数万自定州而北,经飞狐攻取蔚州;西路以忠武军节度使潘美为云、应、朔路行营马步军都部署,灵州观察使杨业为副都部署,率军从雁门、代州越过恒山,出雁门关,攻取寰、朔、应、云诸州。与此同时,赵光义还派监察御史韩国华出使高丽,请求高丽出兵进攻辽东,配合宋军的行动。这次,赵光义吸取了第一次幽州之战的教训,集中了优势兵力,三路并进,分进合击,意图在幽州地区聚歼辽军主力,一举收复燕云十六州。东路军虽是主力,但在中西二路没有取得战果以前,主要担任佯动,赵光义特别交待曹彬等人:“潘美之师,但令先趋云应,卿等以十余万众声言取幽州,且持重缓行,毋贪小利而要敌,敌闻大兵至,必萃劲兵于幽州,兵既聚,则不暇为援于山后矣。”宋军的战略意图是以东路军将辽军主力吸引在幽州以南地区,使其无暇它顾,待中西二路取胜后,再会攻幽州。
1月21日,三路宋军先后出发,由于采取了严格的保密措施,辽国方面直至3月6日才得到消息,针对宋军的分进合击之势,承天太后萧绰决策,集中兵力先对付威胁最大的宋东路军,寻机将其歼灭后,再转移兵力对付力量较弱的中西二路。以南京留守耶律休哥率军先发,东京留守耶律抹只作为后继;山西兵马都统耶律斜轸增援山后诸州,对付田重进和潘美;以林牙耶律痕德守备平州海岸,防备宋军可能从海上进行的袭击,同时征发全国诸道兵马,集中到幽州以北的驼罗口作为总预备队。
三月初,各路宋军转入进攻,起初进展颇为顺利。西路军潘美所部出雁门关西口北上,南败辽军一部,斩首五百余级,神卫右第二军都指挥薛超在寰州再败辽军,辽国寰州刺史赵彦辛投降,3月13日,宋军占领朔州,3月19日占领应州,4月13日占领云州,军锋直指蔚州。3月9日,中路军田重进进至飞狐北,辽国冀州防御使大鹏翼、康州刺史马赟、马军指挥使何万通率军两万人迎战,双方众寡悬殊,但宋军士气高昂,閤门使袁继忠、蕲州刺史谭延美、龙猛副指挥使荆嗣、裨将黄明等人奋勇争先,战至日暮,大败辽军,生擒大鹏翼,3月23日,辽国飞狐守将定武军都指挥使、郢州防御使吕行德、副都指挥使张继从、马军都指挥使刘知进等人投降。3月28日,宋军包围灵丘,守城的步军都指挥使穆超投降,4月17日,宋军进至蔚州,左右都押牙李存墇、许彦钦杀节度使萧啜里,逮捕监城使耿绍忠,投降。
东路军曹彬所部3月5日占领固安,3月13日占领涿州,3月17日,曹彬以勇将李继宣为前锋,率轻骑渡过涿水,歼灭辽军千余人,斩辽国奚部宰相贺斯。这时,辽国援军未到,耶律休哥因兵力不足,所以不与曹彬正面接触,只是想方设法迟滞宋军的行动,昼出精锐虚张声势,夜遣轻骑袭扰,同时又派部分兵力设伏宋军侧后,断其粮道。这一招果然奏效,曹彬的十万大军占据涿州不过十余天,就因粮食不足而退返雄州,如此一来,就为辽军主力赶到后聚歼宋军赢得了时间。
赵光义得知曹彬率全军退而就食,大惊失色,他立即指示曹彬“缘白沟河与米信军接,按兵蓄锐以张西师之势,待美等尽略山后之地会重进东下趋幽州,以全师制敌。”曹彬奉诏后,本来不准备继续北上,但是诸将求功心切,眼看中西二路都获大捷,便纷纷主张再次北进,攻取幽州。副使崔彦进也认为朝廷三路出师,如不急取幽、蓟,恐落人后。曹彬为人谦仁有余、智勇不足,听信了诸将的意见,便决定携带仅剩的五日粮从白沟再次北上。时值酷暑,行军艰难,耶律休哥又沿路伏兵阻击,宋军且战且行,军渴乏井,漉淖而饮,经过四天的时间,才前进到涿州,但已人困马乏,部伍散乱。
这时,曹彬忽然听说,辽国承天太后萧绰、圣宗耶律隆绪已经率领大军进至涿州以东五十里处,即将与耶律休哥所部对宋军形成钳击之势,形势不妙,曹彬决定立即撤退,此时,他还想留下部将卢斌率军万余人守城,但卢斌也不愿当替死鬼,说:“涿州深入北地,外无援内无食,丁籍残失,守必不利,不若以此万人结阵而去,比于固守利百矣。”曹彬同意,便让卢斌裹胁城中民众先行,自己率大军断后。
宋军撤退后,耶律休哥抓住时机,立即率领精骑发起追击。当时,暴雨如注,败退的宋军在泥泞中艰难跋涉,士气低落,“无复行伍”,将领也无法控制,耶律休哥的骑兵在岐沟关追上了逃跑的宋军,这支疲惫之师霎时崩溃,曹彬率领溃军连夜抢渡拒马河,慌乱中人马自相践踏,伤亡甚众,知幽州行府事刘保勋、开封兵曹刘利涉父子、殿中丞孔宜等人溺死河中,宋军残部逃至易水南岸,又被耶律休哥的骑兵追上,前后死者数万人,幸亏勇将李继宣殊死力战,侥幸逃生者才得以奔回高阳。
经过一段时间的休整后,辽军移师西线,以十万大军实施战略反攻,耶律休哥也增援了耶律斜轸,辽军连克蔚州、飞狐。眼看败局已定,赵光义急令中路军退守定州,西路军退屯代州,掩护云,应、寰、朔四州的民众内迁。当时,辽军已占据寰州,杨业力主分兵应州,诱使辽军向东,以保民众安全南撤,但被监军王侁和主帅潘美拒绝,结果,杨业被辽将耶律斜轸打得大败,退至陈家谷口,全军覆没。至此,北宋第二次攻取幽州之战以惨败而告终,所取州县全部得而复失。
消息传来,朝野哗然,赵匡胤的旧臣——武胜军节度使赵普上书,委婉地批评赵光义“信任邪谄”,建议他先修德政、再议征伐,表面上,赵光义对失败不甚在意,还作诗赐给群臣,甚至“推诚悔过”,但这些都是伪装,等曹彬、米信等人逃回后,他立刻撕下了假面具,下令将这些败将羁押,准备处死,后经工部尚书扈蒙竭力相救,曹彬又“素服谢罪”,这才收回成命,贬曹彬为右骁卫上将军,崔彦进为右武卫上将军。岐沟关之战,辽军取胜虽是赵光义、曹彬的错误所致,但最根本的原因是耶律休哥的正确指挥,能抢在宋军合击之前集中兵力,在平原开阔地带以骑兵不断袭扰,在宋军仓促撤退时,又敢于全师追击,力求扩大战果,给宋军主力以歼灭性打击,从此改变了整个宋辽战争的态势,所谓“岐沟之蹶,终宋不振”,此役后,北宋政权完全丧失了战略进攻能力,被迫转入战略防御。