太平兴国四年(公元979年)五月,北汉刘继元已降,宋太宗还师至镇州即转兵北上,欲以新胜之师收复幽蓟。但是破太原尚未赏三军,诸军兵将多不愿行,只是无人敢说。
只有殿前都虞侯崔翰赞成乘胜北征,“所当乘者,势也;不可失者,时也。乘此破竹之势,取之甚易”。
赵光义听此言遂了他的意,很高兴,当即下令枢密使曹彬调发各地屯兵。
当时宋军诸将,大多数比赵光义冷静得多,他们以大军云集,粮储不及为请。
赵光义却兵来将挡,下诏发京东、河北诸州军储,限期转运至镇州北面行营以备供应。当时扈从六军,有没有按时到达指定地点集结的,赵光义大怒,要按军法处置,被臣下谏阻。
而当时的辽对燕地的防守其实早有部署。三月,韩侼、耶律善布、耶律沙等救援北汉时,已命北院大王耶律奚底(又译“希达”)、乙室(伊实)王撒合(萨哈)等,率兵戍守燕地,说明其早已考虑到宋军可能的进攻了。辽在幽州经常屯驻的汉兵,有神武、控鹤、羽林、骁武等军,共约一万八千余骑;又有其所属将帅契丹、九女、奚、南北皮室当值舍利一千九百五十。若契丹大举南侵,则一般调集东京(辽阳府)、中京(大定府)诸路兵,兵力可达二十余万。
六月十三日,宋太宗赵光义自镇州出发,十九日次金台屯,募民百人为向导,二十日至东易州(时宋辽各置一易州,西属宋,东属辽)之西,过拒马河入辽境。
辽易州刺史刘宇,涿州判官刘厚德相继献易州、涿州投降宋军。宋军推进很快。六月二十三日,赵光义大军至幽州城南,驻跸宝光寺。当时辽南京(宋称幽州,辽为南京析津府所在)守将为权知南京留守事韩德让以及权知南京马步军都指挥使耶律学古。另有辽北院大王耶律奚底与统军使萧讨古等军在城北屯扎。
宋军先锋东西班指挥使傅潜、孔守正巡哨城北,在沙河遇到辽军,马上以先至的兵马与之交战,后军不久到达,而后诸军齐集,大败奚底、讨古及乙室王撒合军,斩获甚众,生擒五百余人。辽南院大王耶律斜轸(又译“色珍”)屯兵得胜口(今河北昌平天寿山西北),看宋军锐气正盛,不敢与之直接冲突,便趁着耶律奚底新败,在得胜口用青帜伪作收容溃军之状以诱敌。赵光义得到探马报告,便有轻敌之心,麾军继续攻击,宋军将士乘胜追击,斩首千余级。而斜轸抓住机会突然袭击宋军后方,宋军败退,与斜轸军对峙于清沙河(在今北京城北二十里)北。辽南京城内守军得此声援,固守之志更加坚定。
六月二十五日,宋军看出耶律斜轸兵力不足,只是据险而守,仅能声援幽州之敌,便只留一部兵力与之对峙,而用大军围攻幽州城。定国节度使宋偓与尚食使侯昭愿,领兵万余攻城东南面;河阳节度使崔彦进与内供奉官江守钧,率兵万余攻西北面;彰信节度使刘遇率军攻东北面;定武节度使孟玄喆攻西南面。并以潘美知幽州行府事。
耶律斜轸部将渤海帅达兰罕率部降宋,赵光义以其为渤海都指挥使。自此,城外宋军对守城辽军多方招降,使城中人怀二心,后又有其铁林都指挥使李扎卢存等率所部出降。原在城外的辽御盏郎君耶律学古入城增守,与韩德让等共谋守御,安定反侧,守军才安下心来守城。
六月二十六日,赵光义由城南宝光寺至城北,亲督众将进兵,攻击清沙河辽军,大战一日,杀敌甚众,获马三百余匹,辽军稍却,仍然凭借险要坚守。三十日赵光义又督军攻城,宋军三百人乘夜登城,被耶律学古力战所擒,后又发现并堵塞了宋军挖的隧道,修守备待援兵。而当时,辽南京被围,远近震动,辽顺州守将刘廷素、蓟州守将刘守恩相继率部降宋。
辽景宗耶律贤于六月三十日闻知南京幽州被围,耶律奚底、萧讨古、耶律斜轸等军虽未大败,却不能进援,只能声援,于是急遣南府宰相耶律沙率兵往救,其特里兖(官名)耶律休哥(又译休格)自荐请缨,辽主便以休哥代替奚底,统帅五院军之精锐驰赴前线。
七月初六,耶律沙大军至幽州,赵光义督诸路军攻击,两军战于高梁河,耶律沙力战不支而败退。然而当时的宋军连续近二十日不停地猛攻幽州城,士卒早已疲殆,故而虽然战胜,从中午到傍晚只追了十余里。
令赵光义始料未及的是,耶律休哥率军出其不意间道而来,人人手持火炬直冲,宋军不知其多寡,未等接战心里已经发怵,故不敢接战,欲据高梁河为抵御之计。耶律休哥先收容耶律沙败军,使之回去再战,与宋军相持,然后与耶律斜轸各自统帅精锐骑兵,从耶律沙的左右翼挺进,乘夜夹攻宋军,实行两翼包围钳击之势。
战斗激烈非常,耶律休哥身先士卒,身被三创犹力战。城中耶律学古闻援军已至,也开门列阵,四面鸣鼓,城中居民大呼,响声震天动地。耶律休哥继续率部猛攻,这时宋军才发觉已被包围,又无法抵抗辽军的猛攻,只能纷纷后退。耶律沙从后面追击,而休哥与斜轸两军也对宋军实行超越追击。天赐神钟也被辽军缴获,宋军大败,死者万余人,连夜南退,争道奔走,溃不成军,赵光义与诸将走散,诸将也找不到各自的部下军士。赵光义的近臣见形势危急,慌忙之中找了一辆驴车请赵光义乘坐,急速南逃。
耶律休哥时已受重伤,昏死过去,不能骑马,左右用轻车载着他,代他发号施令,继续追击。一直追到涿州城下,获得兵器、符印、粮草、货币不可胜计。
赵光义于七月初七日天明之后,已先到达涿州城外,当时宋军的败兵还没到。他又绕过涿州城,直奔金台屯,见诸军尚未到达,才敢停住“车驾”观望。初九日,赵光义见诸军仍然未到,便使人往探,这才知道诸军仍在据守涿州,而且有策划立太祖子武功郡王德昭的事,于是急命崔翰往传诏命班师。
赵光义为防备契丹乘胜南侵,命殿前都虞侯崔翰与定武节度使孟玄喆屯兵定州,河阳节度使崔彦进屯关南,云州观察使刘廷翰为都钤辖与彰德节度使李汉琼屯镇州,以上诸军都由刘廷翰指挥并得便宜行事。本来这样就可以了,可赵光义偏偏又授诸将阵图,命令他们,如果契丹来犯,必须入图布阵,交代完之后,他才自金台屯南返,七月二十八日还至东京。
八月初二,赵光义行从征失律之罚,贬西京留守石守信为崇信军节度使,彰信军节度使刘遇为宿州观察使。同时因为北征不利,连平太原之赏也免了。
当时很多人认为这样不行,皇子(赵匡胤之子,当时亦称“皇子”而不称“皇侄”)武功郡王德昭就上谏道:“当先行太原之赏,再行幽州失律之罚。”
宋太宗当时大怒,想起诸将在找不到自己时曾有意立他为帝,更是气不打一处来,说:“待汝自为天子,赏未晚也!”德昭被逼无以自明,退回私舍之后拔剑自刎。
辽军既胜,亦行赏罚。以权知南京留守事韩德让,权南京马步军都指挥使耶律学古,知三司事刘弘,能安人心卫城池,并赐诏褒奖。以前白马岭之败责耶律沙,又以此次击败宋军之功相抵。耶律奚底遇敌而退,以剑背击之。乙室王撒合虽临阵退却,但部伍不乱,得到宽宥。冀王敌烈(或译“迪里”、“塔尔”)战死白马岭,其麾下先逃遁者皆斩,都监以下杖背。然后聚宴诸将士,分别给予赏赐。
此战,宋军失败的原因在于宋军进抵幽州前已历经苦战,消耗颇多,又未得到充分的补充,部队的战斗力已有所削弱。辽军则兵强马壮,战斗力和士气并未因白马岭一战而大伤元气。宋太宗昧于知己,又不能知彼。在平定北汉后即忘乎所以,犯下了轻敌的错误,竟以为能轻而易举地一举扫平幽云诸州。在遇到辽军的坚决抵抗后,宋军既缺乏足够的攻城器械和攻城决心,及不部署充足的阻击敌援军的兵力,占据阻扼敌援的战略要地。当辽援军毫无阻挡地进至幽州城下后,宋军就只能抽调业已疲劳不堪,正在攻城的部队匆匆应战。反陷重围,全军溃败。辽军发挥骑兵优势,依托坚固城防,消耗疲惫宋军,适时以骑兵增援,挫败宋军攻势。宋军的失利,对以后与辽作战造成了不利影响。
宋太宗一直耿耿于怀的还不是高粱河一役的失利,而是天赐神钟被辽军缴获,这是不是预示着自己当皇帝的气数已尽,迷信至极的宋太宗为此苦恼了很久,决心一旦有机会就再次发动对辽国的征讨。