于是,986年(雍熙三年)春天,宋太宗又一次发动北伐,命曹彬为幽州道行营前军骑水陆都部署,向雄州、霸州方面推进;命奚族人米信为西北道都部署,率军出雄州(今河北雄县);以田重进为定州路都部署,出飞狐(今河北涞源)。同时,宋太宗又以
潘美、
杨业为正副统师,率领云、英、朔诸州宋军出雁门伐辽。辽朝方面,萧太后、韩德让等人并不慌怯,马上下令让南京留守耶律休哥率军迎
曹彬,以耶律轸为都统,率兵迎击潘美、杨业的宋军。萧太后带同自己的儿子辽圣宗,亲征而行,驻跸于驼罗口(今北京南口)。
此战宋太宗吸收前战教训,并未直取幽州,而是兵分三路。幽云十六州分山前七州与山后九州,宋军原定以曹彬的东路军为主力攻取涿州,以牵制耶律休哥所率辽军主力,而西路的潘美与东路的田重进则负责攻略山后,待山后攻略完毕则由山后转掠山前,最后汇合的宋朝三路大军与辽军在幽州城下进行主力决战。曹彬老成持重,则以他为盾,牵制辽军主力,潘美锋锐,则以他为矛,攻城略地。为了牵制住耶律休哥,宋军名将大多集中在东路军。
雍熙北伐一开始,宋军诸路皆捷:曹彬一路攻克固安南城,田重进于飞狐北破辽兵,潘美在西陉痛击辽军,克辽朝寰州。不久,曹彬又克涿州,潘美克朔州,下应州,破云州。米信方面,宋军又于新城大败辽军。
辽承天太后
萧绰闻讯,决定以骑兵之长和平坦广阔的有利地形,集中主力先破宋东路军,再移师逐个击破。遂部署南京留守耶律休哥率部先趋涿州阻击,继以东京留守耶律抹只率军驰援幽州;自与圣宗率精骑数万进抵驼罗口(今北京南口附近)应援。同时,以北院枢密使耶律斜轸为山西兵马都统,率军进援山后,阻击宋中、西两路军东进。命林牙(官职)勤德守平州(今河北卢龙)海岸,以防宋军由海上袭击侧后。
由于先前吃过数次败仗,宋太宗在诸将出发前,嘱诫他们“持重缓行,毋贪小利以要敌。”不久,宋军诸路捷报继至,宋太宗不喜反忧,深恐契丹军会乘间断阻宋军补给线。忧虑成真,老成持重的曹彬竟被耶律休哥断了粮道。曹彬十万大军在涿州呆了仅仅十几天,就吃尽了军粮,“乃退师雄州以援供馈。”(只从东路军的角度来说,此举并无过错,在宋军战力未衰之时撤退以避免损失。但是从整个战局看,此举成为了宋军败亡的导火索)宋太宗闻报,大骇:“岂有敌军在前不顾而退军待军粮的道理!”他忙遣使制止曹彬,并告诫曹彬不要再向前进军,率军沿白沟河与米信宋军会兵,“按兵蓄锐以张西师之势。”因曹彬的东路军撤退,则无人可牵制耶律休哥,那么田重进与潘美二军将会陷入危局。
但是,曹彬统下诸将听说潘美、田重进等部连战连捷,深耻己军无功,“谋画蜂起,更相矛盾”,东路军将星云集反而成了宋军败亡的祸根。老将曹彬无法约束诸将,便顺从诸将之意,“乃裹五日粮,再往攻涿州。”
当时,
辽朝萧太后、韩德让、辽圣宗等人在涿州东五十里的地方扎下御营,听闻宋军来击,便遣耶律休哥轻兵疾行,阻击宋军。宋军边急行军边迎战,路上足足用了四天时间,才得以进达至涿州。“时方炎暑,军士疾乏,所赉粮不继。”无法,宋军得城不能坚守,又弃之而去。
曹彬先遣人率涿州百姓退走,他自己率大军殿后。由于人多兵疲,缺粮少水,宋军战斗力极度下降,连个象样的殿后军阵都组织不起来。耶律休哥率辽朝生力骑兵一路尾随,边杀边追,边追边杀,一直追到歧沟关,辽军发动总进攻,宋军大败。曹彬收拾残兵,连夜抢渡拒马河,于易山南岸扎营,准备休整一下喘口气。幸亏宋将
李继宣死战,使得小股宋军逃得活命。但是,数万宋军,或被杀,或掉入河中溺死,或被俘,损失巨大,“为辽师冲击死者数万人,沙河为之不流,弃戈甲若丘陵”。
辽军战后打扫战场,耶律休哥“收宋(军)尸以为京观”。辽朝上下大喜,进封耶律休哥为宋国王,行再生礼,耶律休哥也成为了辽国历史上独有的行再生礼的臣子。
宋太宗闻军败,愤恨不已,深责众将,认为这些人“不遵成算,各骋所见,领十万甲士出塞逼斗”,最终“往复劳弊,为敌所乘”。所以,曹彬、
米信等人回朝后,皆被贬官。