于是,公元986年(雍熙三年)春天,宋太宗又一次发动北伐,命曹彬为幽州道行营前军骑水陆都部署,向雄州、霸州方面推进;命米信为西北道都部署,率军出雄州;以田重进为定州路都部署,出飞狐。同时,宋太宗又以潘美、杨业为正副统师,率领云、英、朔诸州宋军出雁门伐辽。辽朝方面,萧太后、韩德让等人并不慌怯,马上下令让南京留守耶律休哥率军迎曹彬,以耶律轸为都统,率兵迎击潘美、杨业的宋军。萧太后带同自己的儿子辽圣宗,亲征而行,驻跸于驼罗口。
雍熙北伐一开始,宋军诸路皆捷:曹彬一路攻克固安南城 ,田重进于飞狐北破辽兵,潘美在西陉痛击辽军,克辽朝寰州。不久,曹彬又克涿州,潘美克朔州,下应州,破云州。米信方面,宋军又于新城大败辽军。辽承天太后萧绰闻讯,决定以骑兵之长和平坦广阔的有利地形,集中主力先破宋东路军,再移师逐个击破。遂部署南京留守耶律休哥率部先趋涿州阻击,继以东京留守耶律抹只率军驰援幽州;自与圣宗率精骑数万进抵驼罗口应援。同时,以北院枢密使耶律斜轸为山西兵马都统,率军进援山后,阻击宋中、西两路军东进。命林牙(官职)勤德守平州海岸,以防宋军由海上袭击侧后。
由于先前吃过数次败仗,宋太宗在诸将出发前,嘱诫他们“持重缓行,毋贪小利以要敌。”不久,宋军诸路捷报继至,宋太宗不喜反忧,深恐契丹军会乘间断阻宋军补给线。忧虑成真。曹彬十万大军在涿州呆了仅仅十几天,就吃尽了军粮,“乃退师雄州以援供馈。”宋太宗闻报,大骇:“岂有敌军在前不顾而退军待军粮的道理!”他忙遣使制止曹彬,并告诫曹彬不要再向前进军,率军沿白沟河与米信宋军会兵,“按兵蓄锐以张西师之势。”宋太宗本意很好,想等潘美等人尽得山后土地之后,田重进再东下与曹彬、米信会合,全师制敌,与契丹大军决战。
但是,曹彬统下诸将听说潘美、田重进等部连战连捷,深耻己军无功,“谋画蜂起,更相矛盾”。老将曹彬一进也没了主心骨,便顺从诸将之意,“乃裹五日粮,再往攻涿州。”当时,辽朝萧太后、韩德让、辽圣宗等人在涿州东五十里的地方扎下御营,听闻宋军来击,便遣耶律休哥轻兵疾行,阻击宋军。宋军边急行军边迎战,路上足足用了四天时间,才得以进达至涿州。“时方炎暑,军士疾乏,所赉粮不继。”无法,宋军得城不能坚守,又弃之而去。
曹彬先遣人率涿州百姓退走,他自己率大军殿后。由于人多兵疲,缺粮少水,宋军战斗力极度下降,连个象样的殿后军阵都组织不起来。耶律休哥率辽朝生力骑兵一路尾随,边杀边追,边追边杀,一直追到歧沟关,辽军发动总进攻,宋军大败。曹彬收拾残兵,连夜抢渡拒马河,于易山南岸扎营,准备休整一下喘口气。幸亏宋将李继宣死战,使得小股宋军逃得活命。但是,数万宋军,或被杀,或掉入河中溺死,或被俘,损失巨大,“为辽师冲击死者数万人,沙河为之不流,弃戈甲若丘陵”。
辽军战后打扫战场,耶律休哥“收宋尸以为京观”。辽朝上下大喜,进封耶律休哥为宋国王。宋太宗闻军败,愤恨不已,深责众将,认为这些人“不遵成算,各骋所见,领十万甲士出塞逼斗”,最终“往复劳弊,为敌所乘”。所以,曹彬、米信等人回朝后,皆被贬官。由于东路主力大败,宋太宗合围幽州的战略意图再难实现。辽朝方面开始反扑,耶律斜轸统十万大军赶至安定西,与宋朝雄州知州贺令图相遇,双方大战,宋军又败,被杀一万多人。辽军乘胜攻陷蔚州、寰州等地。深知西路军已经无望,宋太宗下诏指示潘美,让他与杨业一起引兵护送云、朔、寰、应四州百姓内迁。
时辽军已占据寰州,副帅杨业力主分兵应州,诱辽军向东,另以强弩手千人扼守石竭谷口,阻击辽军,以保民众安全南撤。监军王倪及潘美不纳杨业建议,逼其出雁门直趋朔州出战。及战失利,回师陈家谷口,潘美、王侁已违约先撤。杨业孤军奋战,负伤被俘,绝食而死。中路军田重进不辱使命,全军而返,并带回部分收复地区百姓。至此,宋三路大军皆败,所取州县复失。