赵光义对这次北伐准备得也是非常充分,他先命太子允中张洎出使高丽,要求高丽在后方对辽国进行牵制,接着又分遣官员赴诸道传旨,督促地方军队向河东进发,之后正式任命宣徽南院使潘美为北路都招讨制置使,命他率崔彦进、李汉琼、曹翰、刘遇等大将先行出发,围攻太原。赵光义还亲授机宜,命崔彦进与郢州防御使尹勋攻打太原东面,彰德节度使李汉琼、冀州刺史牛进思攻打太原南面,桂州观察使曹翰、翰林使杜彦珪攻打太原西面,彰信军节度使刘遇、光州刺史史珪攻打太原的北面。原本按照班次排位,是应该由刘遇攻打太原西城,可是西城是北汉主刘继元的皇宫所在地,非常坚固,刘遇强烈要求跟曹翰调换。曹翰起先不干,认为节度使位在观察使之上,理应去啃最难啃的骨头,怎么能见困难就退呢?两人一时争执不下,后来赵光义生怕诸将不合,影响协同作战,只好帮着刘遇忽悠曹翰说道:“爱卿智勇双全,举世无双,西面除了你,又有谁能攻得下来呢?”曹翰听完,也就欣然领命了。
正月底,潘美率领大军离京出发,此时宋军已有先头部队进入了北汉的国境。北汉在遭宋军多次打击后,国力十分疲惫,根本就无力对边境防守,使宋军的先头部队如入无人之境,直抵太原城下,随后四面筑起营寨,将太原围困起来。这一来,顿将北汉主刘继元吓得心惊胆颤,他自知单凭北汉自身国力,根本就无法对抗宋军,只好急遣使赴辽国求援。
其实早在汉使到来之前,辽主耶律贤就已经得知了宋朝出兵北汉的消息,心里十分懊悔没有听信耶律呼图的劝告,但北汉又不能不救,只好遣使赴大梁质问宋朝为什么要无故出兵攻打北汉。此时宋朝兵强马壮,赵光义说话十分硬气,对辽使说道:“刘继元违天逆命,理应讨伐,如果辽国不去援助,咱们的和约仍如以前一样,否则就只有一战!”
耶律贤接到使者回复后,也知道战争不可避免了,只得命南府宰相耶律沙、冀王塔尔、南院大王色珍等率部赴援。但赵光义对此早有准备,早在出兵之前,就将云州观察使郭进任命为石岭关都部署,率部截击辽军。
二月十五日,赵光义为了能将北汉一举消灭,不顾鞍马劳苦,率大军从京城出发,御驾亲征太原。四日之后,车驾到达澶州,临江主薄宋捷在路边迎接。赵光义阅览他的奏章,见署名是“宋捷”两个字,顿时大喜道:“宋军捷矣!”当即将他提升为监丞。
三月初一,赵光义的车驾到达镇州,随即分遣兵马攻打北汉隆、沁、汾等州,以牵制这几州兵马不敢回援太原。几乎与此同时,辽国南府宰相耶律沙、冀王塔尔的援军也已进入了北汉境内。
前文多次讲过,北汉之所以能够立国二十余年,并非是因为自身的力量能够对抗中原,所依仗的完全是来自于辽国的支持。而这一次由于辽国出兵匆忙,所派兵力有限,耶律沙到达白马岭(今山西盂县东北)后,正好遇到宋军郭进部的阻拦。两军隔着一条大涧相对,耶律沙见宋军早有防备,不敢轻易进军,便跟冀王塔尔商量道:“宋军人多势众,不易轻取,还是先扎下营寨,然后派人回国请求援军再渡涧作战吧!”塔尔听罢大为不满,说道:“宰相也太懦弱了吧!你我率军出征,战不能胜,请求主上增兵倒也情有可原,可哪有一仗不打就乞请援兵的道理呢?你若担心不能取胜,就请在河边观我破敌。”说完也不再和耶律沙商量,自领本部人马就向河对岸杀去。耶律沙无奈,也只好率部跟上。
辽军强行渡河,犯了兵家大忌,郭进见罢欣喜若狂,但严令约束部下不得出击。等辽军渡过一半时,郭进这才挥动令旗,号令全军进击。霎时间,白马岭上喊杀声响彻云霄,宋军将士个个如下山猛虎般向辽军扑去。辽军尚来不及列好阵势,就被冲乱了阵脚,相互冲撞践踏,死伤不可胜计。一仗下来,冀王塔尔和他的儿子华格,耶律沙之子德琳、令衮图敏等大将都当场阵亡,耶律沙也被宋军包围,几乎就要被擒,多亏辽国南院大王耶律色珍带兵赶到,拼死相救,这才让耶律沙捡回一条性命。
郭进在白马岭大破辽军的消息传到镇州后,赵光义大喜过望,高声对左右说道:“辽军已破,石岭关外再无忧矣!”随即传令起驾镇州,向太原进发。
就在赵光义赶往太原途中的这段时间内,河东战场上的各路宋军也是捷报频传。四月一日,宋军在岚州大破北汉军。次日,盂县守军向宋军开城投降。四月三日,北汉驸马都尉卢俊,自代州驰往辽国告急,可是辽军新败之余,不敢答应再出兵救援。四月十四日,宋军再次于岚州大破北汉军,并俘获可岚军使折令图,随后攻破岚州。四月十六日,宋军攻克隆州。至此,太原外围所有战略要地已被宋军尽数拔除,太原已成孤城一座。
四月二十二日,赵光义抵达太原,驻跸汾水之东。此时的太原,早已被宋军团团围住,潘美亲自坐镇指挥,崔彦进、李汉琼、曹翰、刘遇等大将按照战前布置,各守太原一面,昼夜不停地对城发起猛攻。四月二十三日,赵光义亲临太原城西,慰劳前线将士。此处是刘继元的皇宫所在地,城防最为坚固,也是此次太原攻防战的重中之重。赵光义亲临前敌,顿使宋军气势大振,攻城更急,当日就将城头用来防护的矮墙全数破坏。城内军民为此惊恐震骇,北汉主刘继元更是焦急如焚,坐卧不安。
此时太原的形势已是岌岌可危,赵光义担心破城之后杀戮太重,便于晚间亲笔写下手诏,派使者送入城内,敦促刘继元投降。可守城的汉军不敢擅自接受,又把使者赶了回去。这一来,赵光义顿时大怒,次日又亲临城西指挥攻城。早在征太原前,赵光义曾在军队中精选出数百勇士,教习他们舞剑之术。这些勇士也都刻苦训练,剑法精熟,都能将剑高高抛起,然后身躯跳跃,左右旋转,稳稳将剑接住。当时有辽国使者入朝,赵光义在赐宴时就故意让这些勇士舞剑助兴,将辽使吓得不敢正视。此时,赵光义又将这几百勇士带到了太原,命他们表演舞剑之术。这些勇士上了战场,也格外兴奋,在城下列好阵势,抛剑扭转跳跃承接,只见剑光闪烁,人影晃动,声势极为骇人。
舞剑过后,赵光义戎装持剑,亲自指挥数十万控衔之士,在舆前列好阵势,向城中放箭,顿时飞矢雨集,遮云蔽日,将北汉城中守兵压得不敢抬头。后来抓来一名活口,称北汉主在城中买射上来的箭,每支箭可换钱十文,竟达百万箭以上。赵光义闻言大笑道:“此箭为我蓄也。”后来城破,这些箭果然被原封不动地取了回来。
其后数日,赵光义每日都要戎装上阵,左右都劝他靠后指挥,赵光义则说道:“将士皆争先效命于锋镝之下,朕岂忍坐观!”这句话被将士们听到后,更是士气大振,无不舍生忘死,奋勇攻城。
面对宋军排山倒海般的攻势,太原形势岌岌可危。五月一日,赵光义亲临太原西南,督战甚急,从早到晚不肯停歇,至次日天明,已将太原羊马城(城外修建的御敌工事)攻破。紧随其后,北汉宣徽使范超出城投降,可惜事先没能与宋军取得联络,竟被误认为是出城迎战的,结果被宋军擒下斩杀,其家人也被刘继元斩去首级,抛出城外。
范超是北汉的高层人士,虽说是投降失败,但却极大地动摇了北汉军心,顿使太原城中人心惶惶,纷纷暗地寻求出路。五月二日,北汉代州刺史刘继文和驸马都尉卢俊逃往辽国。五月三日,北汉马步军都指挥使郭万超率部来降。五月四日,赵光义驾临城南,召集众将说道:“明日是端午节,当与诸卿食于城中。”说罢又亲手写下一封劝降书信,命人送入城中,声称刘继元只要肯降,必定让他“永保富贵”,不过依旧没有得到回音。
五月五日这一天,赵光义又再临城南,指挥宋军对太原发起最为猛烈地一次攻击。这个时候,太原城防已临近了崩溃的边缘,宋军将士皆想争得头功,谁也不肯落后,个个如出笼猛虎一般,架起云梯,奋力攀援,一排排宋军冲了上去,却被城头的滚木礌石所击落,但紧跟着又有大批的宋兵如潮水般蜂拥而至。太原城外尸体堆积如山,鲜血染红沙土,呐喊声、咆哮声、战鼓声混为一体,构成了世界上最为狰狞的声响。宋军将士已经杀红了双眼,他们疯狂地向城头冲击,大地在他们的脚下颤抖,太原的城墙也似乎将被他们的喊杀声所撕裂。然而就在这个时候,赵光义却突然想起,如果让这群野兽一样的士兵冲击城里,又将会是一个什么样的下场?于是他立即传令收兵。
赵光义的一念之仁,让五代十国的历史晚结束了一天,但这也确确实实地挽救了许多人的生命。就在当晚,北汉业已致仕的左仆射马峰抱病来到宫内,满面流涕对刘继元说道:“主上,自唐末以来,宇内分崩,山河碎裂,诸侯为谋一己之私,耗尽国财民力,不惜涂炭生灵,血战至今,已逾百年,上天对此早已厌倦。而今宋朝兴起,渐次扫平群雄,这正是上天有意假赵家之手来澄清天下。我朝开国二十余年,仰仗着祖宗的余烈和辽国的援助,得以与中原分庭抗礼。可到了今晚,祖宗的威灵不再保佑我们,辽国的援兵也无力再来相救,亡国已就在眼前。主上若能顺天应势,赶在城门未破之前,及时献出户籍版图,尚可不失富贵。一旦过了今晚,恐怕主上和刘家的祖庙宗室,就会连同这满城的百姓,一起玉石俱焚了。”说罢放声痛哭。