一開始,宋軍進攻頗為順利,特別是潘美、楊繼業率領的西路軍,由於楊繼業作戰英勇,所向披靡,很快就打下了幽州(今山西省朔縣東)、朔州(今山西省朔縣)、應州(今山西省應縣)雲州(今山西省大同市)等4個州,前鋒到達了桑幹河。可是由曹彬率領的東路軍打了敗仗,隊伍損失嚴重。宋太宗見主力部隊打了敗仗,趕快下令退兵。潘美、楊繼業率領的西路軍雖然打了勝仗,也隻好奉命退回代州。原先已經攻克的應州,留駐那裏的宋軍見大軍退走,害怕遼軍打來,棄城而逃。於是遼軍就輕易地奪回了應州,接著,遼國太後蕭氏和大將耶律漢寧帶著10多萬軍隊,發動大規模反攻,重新占領了幽州,形勢變得對宋軍大大不利了。
宋太宗見新攻克的幽、朔、應、雲4州又將重陷遼人之手,不禁對4州的人民起了惻隱之心,他下令要將4州的人民遷徙到內地,叫潘美、楊繼業帶兵掩護他們內遷。可是遼軍已經占領幽、應2州,朔、雲2州雖然尚未陷落,卻處於敵人背後,那裏的人民又如何能夠平安地內遷呢?
宋軍的幾位將領聚在一起,討論撤退4州人民的辦法。楊繼業作戰經驗豐富,提出一個比較穩妥的作戰方案。他說:“如今遼軍氣勢很盛,不可正麵與之硬打,況且朝廷隻令我們接回4州的人民,並沒有要我們與遼軍爭奪這4州之地。我們隻要出兵假裝要奪回應州,敵人自然會把兵力集中到應州來跟我們決戰。我們另派得力幹將,秘密與雲、朔二州守將約定曰期,叫他們利用遼兵隻顧應州的時機,趕快帶領百姓往南撤退。再派一支騎兵在中途接應,又派幾千名弓箭手在石碣穀埋伏,等他們一退到穀口,遼軍派卷來追時,我們萬箭齊發,把遼軍阻於穀口之外,4州的人民就能安全歸來了。”楊繼業的話剛說完,根本不懂軍事的監軍站出來反對。他說:“我們擁有數萬精兵,何必如此膽小害怕。我們應該走雁門關北麵的大路,大張旗鼓地再向4州進軍,去接回4州人民。”劉文裕聽這麼說,也趕快隨聲附和,說這樣做正確。楊繼業回答:作戰應靈活機動,不應盲目硬碰。如今形勢已有變化,再如此行動,必敗無疑。”還沒等楊繼業說完,便帶著諷刺的口氣說:“將軍向來號稱無敵,如今看到敵人就逗留不前,不肯出兵打仗,難道你有別的打算不成?”
楊繼業生性耿直,聽不得別人的譏諷,聽說得這麼不客氣,就站起來說:“我楊繼業從來不怕死,隻是因為時機不利,不願意讓士兵們白白地去送死而立不了功。你們既然責備我怕死,那我就領兵去打頭陣!”
主將潘美也明明知道這樣出兵是冒險行為,凶多吉少,但是他對楊繼業存有防忌之心,所以未加阻攔。楊繼業領兵出發前,流著眼淚對潘美說:“我這次出兵,一定不利。我原想等待時機,為國家殺敵立功,報效皇上對我的厚愛。如今有人責備我害怕敵人,我就先走一步,去跟敵人拚命。”接著,他指指陳家穀口說:“請你們在這裏準備好步兵和弓箭手,分左右兩翼埋伏好,等我轉戰到這裏時,你們就出來接應。”說完,他便和兒子楊延玉帶領兵馬向朔州進發。