宋雍熙三年(公元986年),宋太宗聽信邊臣的情報,認為遼帝剛死,主幼國弱,是伐遼的大好時機,於是下令兵分三路奪取幽州(今北京市),誌在收複燕雲十六州。
戰爭初期,宋軍勢如破竹,連接奪地克城,可是由於宋將曹彬率領攻打幽州的主力部隊沒按宋太宗事先布置的計劃行事,而是在眾將的要求之下貪功冒進,直取涿州(今河北涿縣),又因糧草不濟不得不退出涿州,結果給遼軍造成可乘之機,10萬大軍在歧溝關(今河北涿縣西南)被遼兵打得大敗,伐遼取燕雲十六州的計劃破產了。中路和西路軍也不得不後撤。
西路大軍由潘美、楊業率領。在後撤時,宋太宗下令將境內的百姓遷入內地。在掩護百姓後撤過程中,主帥潘美不明形勢,聽信讒言,臨陣逃走,致使楊業兵敗戰死。楊業作戰英勇,人稱“楊無敵”。遼兵對他十分害怕。楊業的死,使得北部邊防缺少了一員大將。由誰來填補這一空缺呢?這令宋太宗頗為費神,於是他向近臣尋訪合適的人選。這時,左諫議大夫張齊賢主動請求鎮守北邊,宋太宗便任命張齊賢為代州(今山西代縣)知州,同潘美一道統領兵馬抗擊遼兵。
張齊賢從小便勤學苦讀,頗有遠大誌向。宋太祖到西京洛陽(今河南洛陽)巡幸時,張齊賢以布衣百姓的身份攔住宋太祖的馬,向宋太祖獻上10條治國之策。宋太祖回到京城後,對宋太宗說:“我去洛陽,惟一的收獲便是得到了一個張齊賢,我不打算給他封官,還是讓他以後為相來輔佐你吧。
宋太宗即位後廣開科舉,張齊賢中進士。入朝為官後,張齊賢在許多重大問題上都提出了自己的獨到看法;對北征伐遼,他認為應以人為本,疆土為末,宜先本而後末,安內養外。
張齊賢到代州上任後不久,遼兵便自湖穀(今山西崞縣西北)入侵,大軍直抵代州城下。代州城中的神衛都校馬正率所部在城南門外列陣迎敵,但是人數太少,而副將又驚慌害怕,領著本部兵馬躲在城中自保,張齊賢見到這種情況,便在從事勞作的廂軍中挑選2000人,慷慨誓師,然後親自率領,從馬正的右側殺出,遼兵見宋軍來勢凶猛,便從城下退走了。
當遼兵來犯時,張齊賢便已派人給潘美送信,讓他發兵,以便聯手將遼兵擊退。但是,張齊賢派出送信的人在回來的路上被遼兵俘獲,張齊賢因此很擔心潘美出兵的事已泄露,萬一潘美率軍前來,就會遭遼兵伏擊。正在張齊賢擔心的時候,潘美派人來送信說,大軍從並州(今山西太原市)出發,剛到柏井(今山西陽曲縣東北)便接到了宋太宗的密詔:宋軍在君子館(今河北廣縣西北)同遼軍的會戰中大敗,數萬人戰死,並州的兵馬不準出戰,所以潘美率大軍已退回並州。張齊賢得知潘美的大軍不再前來,心中鬆了一口氣,但如何擊退眼前的遼兵,張齊賢又開始了思考。當他問明目前遼軍的分布和四周的山川形勢之後,一個破敵計劃在心中形成了。
張齊賢先將潘美派來的送信的密使軟禁起來,嚴密封鎖潘美退兵的消息,然後對眾將說:“遼兵知道潘美要率兵前來會戰,卻不知道潘美已退兵,這正是我們破敵的大好時機。”
於是,在半夜時分,張齊賢派出200人,每人手持一麵旗幟,肩背一捆柴草,到距代州西南30裏的大山中,遍地插旗,燃燒柴草,虛張聲勢,然後又派出2000步兵,在土橙寨(今山西寧武縣東)設伏。遼兵遠遠望見代州城西南有火光,火光中還有旗幟飄動,以為潘美的大軍已然到達代州城外,便慌忙向北逃走,這正讓土橙寨設伏的宋軍候個正著,宋軍一通掩殺。打得遼軍大敗。這一仗,宋軍俘獲了很多遼軍將領,斬首數百人,繳獲了2000多匹戰馬,還有許多兵器、鎧甲。
後人在評論宋軍歧溝關大戰失利後的對遼作戰時說:大小幾十餘戰,惟有張齊賢打了一場漂亮的勝仗。