太平興國四年(979年)正月,趙光義先派大將潘美等揮師北上,圍攻北漢都城太原,趙光義於二月率軍親征,宋軍擊退遼國援兵,滅亡北漢,終於結束了自唐末黃巢之亂以來近九十年藩鎮割據混戰的局面,再次形式上一統全國。
滅了北漢政權,宋軍將士們個個都興高采烈,想等着皇帝封賞,然後再好好休整一下。但宋太宗不這麼想,他想趁熱打鐵,從遼國手中收復燕雲十六州。燕雲十六州,又稱“幽雲十六州”,即今北京、天津全境,以及山西、河北北部地區。包括燕(幽)、薊、瀛、莫、涿、檀、順、雲、儒、媯、武、新、蔚、應、寰、朔,共十六州。燕雲十六州位於長城沿線,所處的地勢居高臨下,易守難攻,歷來是中原王朝抵禦北方遊牧民族入侵的重要屏障。
唐以前,燕雲十六州均為中原王朝所有。公元938年,石敬瑭把燕雲十六州割讓給遼國,至此中原王朝失去了這一戰略要地。沒有燕雲十六州這個北部屏障,中原地區就赤裸裸地暴露在北方遊牧民族的鐵蹄下,遼國騎兵就像走親戚串門一樣,來去自由。
宋朝開國之後,宋太祖趙匡胤念念不忘收復燕雲地區,曾在內府庫專置“封樁庫”,打算用金錢贖回失地。這當然是不現實的,燕雲地區做為遼國最富裕的地區,也是南下中原的橋頭堡,自然不會輕易放棄。於是趙光義不顧眾臣反對,趁伐取北漢之勢,從太原出發展開北伐。
公元979年6月3日,宋太宗趙光義自鎮州出發,過拒馬河入遼境。遼易州刺史劉宇,涿州判官劉厚德相繼獻易州、涿州投降宋軍。宋軍推進很快。6月23日,趙光義大軍至幽州城南,駐蹕寶光寺。當時遼南京(宋稱幽州,遼為南京析津府所在)守將為權知南京留守事韓德讓以及權知南京馬步軍都指揮使耶律學古。
6月25日,宋太宗下令圍城進攻,數十萬大軍把幽州城圍得密不透風。燕雲之戰打響了,宋遼的百年恩怨也拉開了大幕。幽州城在宋軍的猛攻之下已經有了陷落的危險,幽州城內,上至將帥,下至百姓,都人心惶惶,遼鐵林都指揮使李札盧存率領着百十來名不想戰死的部下出城投降。守軍一出,城內大亂,此時雞鳴狗跳,百姓四處逃竄,彷彿宋軍已經開始血洗幽州城。太宗聞此訊息,命令部將加緊攻城,此行務必收下幽州城。然而戰事並未如預期的那般順利,在幽州城破即將攻破之時,遼軍的南京馬步軍都指揮使耶律學古率兵從山後馳至幽州城外,繞開宋軍的陣地,偷偷地挖了一條地道,潛入城內,與城內守軍相會,共同抵抗宋軍。心急如焚的太宗再次集結兵力攻城。但是將士們已經精疲力竭,懈怠厭戰。士氣日益衰竭,攻城也日益困難。但此時遼軍可並未閒置着,他們趁宋軍怠倦疲敝,無力他顧之時,遼景宗耶律賢遣南府丞相耶律沙、北院大王耶律休哥各率所部騎兵救援。
七月初六,耶律沙大軍至幽州,趙光義督諸路軍攻擊,兩軍戰於高梁河,耶律沙力戰不支而敗退。然而當時的宋軍連續近二十日不停地猛攻幽州城,士卒早已疲殆,故而雖然戰勝,從中午到傍晚只追了十餘里。令趙光義始料未及的是,耶律休哥率軍出其不意在見道出現,且人人手持火炬直衝,宋軍不知其多寡,未等接戰心裏已經發怵,故不敢接戰。宋軍一來對夜戰沒有絲毫準備,二來探不清敵方虛實,只得停止追擊,在高梁河畔列陣,準備進行硬碰硬的正面對攻戰。
耶律休哥先收容耶律沙敗軍,使之回去再戰,與宋軍相持,然後與耶律斜軫各自統帥精鋭騎兵,從耶律沙的左右翼挺進,乘夜夾攻宋軍,實行兩翼包圍鉗擊之勢。戰鬥激烈非常,耶律休哥身先士卒,身被三創猶力戰。城中耶律學古聞援軍已至,也開門列陣,四面鳴鼓,城中居民大呼,響聲震天動地。耶律休哥繼續率部猛攻,這時宋軍才發覺已被包圍,又無法抵抗遼軍的猛攻,只能紛紛後退。耶律沙從後面追擊,而休哥與斜軫兩軍也對宋軍實行超越追擊。
宋軍大敗,死者萬餘人,連夜南退,爭道奔走,潰不成軍,趙光義與諸將走散,諸將也找不到各自的部下軍士。趙光義的近臣見形勢危急,慌忙之中找了一輛驢車請趙光義乘坐,急速南逃。耶律休哥時已受重傷,昏死過去,不能騎馬,左右用輕車載着他,代他發號施令,繼續追擊。一直追到涿州城下,獲得兵器、符印、糧草、貨幣不可勝計。
高梁河一戰,宋軍傷亡數萬,元氣大傷。此戰失利,宋太宗負有不可推卸的責任。趙光義被攻克太原的勝利衝昏了頭腦,對遼軍的實力及其擁有大量騎兵的情況估計不足,在部隊疲睏交加的形勢下,倉促出兵,企圖以突然的行動、優勢的兵力數量,一舉襲取幽州地區。這種輕率魯莽、僥倖取勝的投機舉動,最後遭到失敗乃是情理中事。他急於求成,貪功冒進,以疲憊之師攻擊堅城,對敵情瞭解不夠。另外對遼軍的援兵估計不足,沒有做好阻援的準備,最終導致腹背受敵,大敗而回。高梁河戰役是宋遼之間的第一次大規模正面交鋒,這次戰役失利使得宋對遼國在心理上處於了劣勢,尤其對遼軍騎兵的衝擊力非常忌憚。
高粱河一役作為遼宋關係的重要轉折點直接造成了日後的宋連戰連敗,到澶淵之盟,至此宋朝對遼國基本上都是處於被壓制的狀態,更談不上收復燕雲十六州了。而燕雲地區不能收復,中原無險可守,門户大開,使得北宋一直處於北方騎兵的威脅之下,並最終導致在靖康之變中亡國。