七月,耶律沙率遼援軍進抵幽州城下,與宋軍大戰於高梁河(今北京西直門外)邊。遼軍初戰不利。耶律休哥和耶律斜軫軍及時趕到,分左右翼橫擊宋軍。幽州城內的遼軍也開門出擊。宋軍大敗,趙光義中箭負傷。遼軍乘勝攻擊,追至涿州,繳獲大量的軍械資糧,挫敗了宋軍的第一次北伐。
高梁河之戰後,遼軍曾數度越界南下。太平興國七年(982年),遼景宗去世,遼軍即停止南侵。雙方處於休戰狀態。不過在此期間,宋太宗一直在準備二度北伐,以收複幽州,報仇雪恥。
太平興國十一年(986年),宋知雄州(今河北雄縣)賀令圖等上言,說遼主少國疑,母後專權,寵臣用事,國人怨疾,建議乘此機會,直取幽雲。其實這時遼統治集團君臣協和,政治賢明,並不存在什麼可乘之機。但趙光義卻信以為真,不顧參知政事李至的反對,不顧糧草、軍械缺乏、北伐準備不足、開戰勝算不多的實際情況,不和宰相商量,即決定對遼用兵,兵分三路,大舉北伐。
宋東路軍一支以曹彬為主將,另一支以米信為主將。共擁有10餘萬兵力,是北伐的主力,由雄州直指出州。中路軍以田重進為主將,由定州(今河北定縣)進攻飛狐(今河北淶源)、蔚州(今河北蔚縣)。西路軍以潘美為主將,楊業為副將,出雁門(今山西代縣),進攻雲(今山西大同)、朔(今山西朔縣)諸州。
遼軍的戰略部署是以南京留守耶律休哥部抵禦宋東路軍,以耶律斜軫部抗擊宋中路和西路軍,以勤德部守衛平州(今河北盧龍),保衛側後方的安全。遼聖宗和蕭太後則率戰略預備隊駐幽州。
戰事初起,宋中、西二路軍進展順利,勢如破竹,連下飛狐、蔚、寰、朔、應、雲諸州。東路軍於三月初攻克固安、新城(今河北新城東南),並占領涿州。耶律休哥避免與宋軍決戰,僅以小部隊騷擾宋軍,阻斷其糧道。十餘日後,曹彬因糧草不繼,退往雄州。
趙光義得報後認為大敵當前,回軍就糧乃兵家所忌,立即下令東路軍不得後退,亦不準再進,並命曹彬率部沿白溝與米信部會合,待中路、西路攻占山地之後,再會師北上。但曹彬所部諸將聽到中、西二路連戰皆捷的消息後,惟恐落他路之後,無不積極求戰,力主北上。曹彬無法控製,隻得再次率部北進。宋軍沿途迭遭遼軍阻擊,且戰且行。時值天氣炎熱,將士體力消耗頗大,抵達涿州時全軍上下均已疲乏不堪。這時,與曹彬正麵抗衡的是耶律休哥部,蕭太後、遼聖宗所率遼軍已從幽州北郊進至涿州以東25公裏的駝羅口,攻占固安。曹彬所率宋軍糧草將盡,難以固守拒戰,又麵臨遼軍主力合擊的威脅,遂向西南方向撤退。五月,遼軍在岐溝關追上宋軍,大敗曹彬、米信軍,並乘勝追至拒馬河,宋軍溺死無數。餘眾奔高陽,又受到遼軍騎兵的衝擊,死者達數萬之眾,遺棄的兵甲堆積如山。
遼在岐溝關一役後,即移兵西向,攻克飛狐和蔚、寰、應諸州。宋將楊業重傷被俘,不屈而死。山後諸州又落到遼的控製之下。
宋太宗第二次北伐徹底失敗,遼軍在再次挫敗宋軍的進攻後,又一次轉而采取攻勢。
鹹平二年(999年),遼軍大舉南下,前鋒抵達邢(今河北邢台)、洺(今河北永年東南)、淄(今山東淄博南)、齊(今山東濟南)一線。
景德元年(1004年)秋,蕭太後與遼聖宗大舉攻宋。
閏九月,遼軍會集固安,攻順安軍(今河北高陽東)、威虜軍、北平寨(今河北完縣東北)、保州均未克。後轉攻定州,被阻於唐河。遂移師東向瀛州,並利用降將王繼忠致書宋真宗,試探議和。
十月,遼集兵攻瀛州(今河北河間),10餘日不克,傷亡慘重。十一月,轉兵攻天雄軍(今河北大名東北)不克,南下破德清軍(今河南清豐西北),威逼澶州(今河南濮陽),襲取通利軍(今河南浚縣東北)。
十一月,大將蕭撻凜在澶州察看戰地時,中宋軍伏弩身亡。遼失主將,士氣大挫,軍心厭戰,且恐宋屯鎮、定二州重兵襲擊側後,亟謀妥協。宋以澶州為決戰戰場,集中兵力與遼軍相持。真宗臨陣督戰,以振軍心。但惟恐遼軍突破澶州,危及東京(今河南開封),遂以向遼納幣帛為條件,締結和約,史稱“澶淵之盟”。宋遼戰爭遂告結束。
“澶淵之盟”不僅使遼兵安然從險境中脫身,還獲得了戰場上本來得不到的東西。但對宋朝來說“澶淵之盟”則是一個屈辱妥協的和約。不過,從中華民族的發展史看,“澶淵之盟”的訂立,結束了宋遼之間連續25年的戰爭,使此後的宋遼邊境近百年處於相對和平穩定的狀態。不僅雙方邊境大片地區得以發展生產,而且雙方還通過“榷場”進行經濟交流和商業活動,因而對南北經濟文化的發展和提高是十分有利的。