又堅壁了一段時間,李世民手下的有些部將不耐煩了,請求與宋金剛交戰。李世民說:“宋金剛孤軍深入,麾下集中了精兵猛將,劉武周占據太原,依仗宋金剛為屏障。宋金剛的軍隊沒有儲備,比我們更缺糧食,隻有靠掠奪補充軍需,利於速戰。我們關閉營門不出,養精蓄銳,可以挫敗他們的銳氣。分兵攻汾州、隰州,騷擾他的心腹之地,他們糧盡無計可施,自然會退軍。我們應當等到那時再戰,目前不宜速戰。”
雙方對壘相持5個月後,宋金剛軍糧困乏,正值隆冬季節,再也沒有糧食可以掠奪了,部隊士氣大減,不得不撤軍補充糧食。李世民親率大軍奮勇追擊,唐軍漫山遍野,傾巢而出,鼓聲震天,喊聲如雷。至呂州追上了斷後的宋金剛部將尋相。唐軍憋足了勁,衝入尋相的部隊,就如狼入羊群,勢如破竹。尋相抵敵不住,大敗而走。李世民緊隨其後,乘勝追擊,尋相返回又戰,戰敗再逃,李世民又繼續追擊,一晝夜走了200多裏,打了幾十仗。追到高壁嶺,總管劉弘基抓住李世民的馬韁規勸道:“大王打敗敵人,追到這裏,功勞已足夠了,不斷深入,就不愛惜自己嗎?況且士兵們饑餓疲憊,應當在此停留紮營,等到兵馬糧草都齊備了,然後再進擊也不晚。”李世民說:“宋金剛無計可施才逃跑,軍心渙散;功勞難立而失敗頗易,機會難得,轉瞬即逝,一定要趁此機會消滅他。如果我們停滯不前,讓他有時間考慮對策加以防備,就不可能輕易打敗他了。我盡心竭力效忠國家,怎麼能隻顧惜自己的身體呢?”於是,催馬向前,繼續追擊,一看主帥如此,將士們也不敢再提饑餓。唐軍在雀鼠穀追上宋金剛,一天交鋒八次,都打了勝仗,俘虜和斬殺的敵軍有好幾萬。
當晚,在雀鼠穀宿營。李世民和將士們已經兩天沒有吃飯,三天沒有解甲睡覺。他們稍稍休息。接著,李世民帶兵繼續追擊。
這時,宋金剛尚有兩萬精銳部隊,在城西寬闊之處,背城布陣,南北相連有六七裏長。宋金剛擺出這樣的陣勢,準備和李世民決一死戰。李世民知道決戰的時刻到了,他命李世勣、程咬金、秦叔寶在北麵布陣,翟長孫、秦武通在南麵布陣,他本人則親率3000精騎衝其陣後,這一仗都抱著必死的決心,雙方殺得難分難解,屍橫遍野,血流成河。但畢竟宋金剛新敗,士氣低落,難以抵擋,大敗而逃。李世民追出幾十裏,一直追到張難堡,摘下頭盔向堡壘上的士兵示意,守堡壘的軍士認出李世民,都歡呼雀躍,高興得流下淚來。隨從告訴守軍:秦王還未進食。守軍便獻上混酒、粗米飯,秦王吃得很香。在張難堡,敵軍將領尉遲敬德、尋相等率餘部八千人來降。
尉遲敬德籍屬朔州,武勇善騎,是一位傑出的精騎將領。李世民得到尉遲敬德非常高興,引為右一府統軍,並讓他仍然統領八千舊部。有人擔心尉遲敬德會叛變,李世民不聽,說:“昔蕭王推赤心置人腹中,並能畢命,今委任敬德,又何疑也?”
宋金剛收拾殘部,準備再戰,但部眾都不肯隨他與唐作戰,於是宋金剛隻得和一百多騎兵逃往突厥。至此,劉武周的大部分軍隊被李世民打敗了。劉武周得知全軍潰敗,隻得棄太原北走。不久,宋金剛打算從突厥跑回上穀,被突厥捉回,處以腰斬之刑。
劉武周當初南侵犯唐時,他的內史令範君璋曾規勸道:“唐主以一個州的兵力,直取長安,所向無敵,這是上天有助,不是人力。晉陽以南,道路狹窄險要,孤軍深入,後無援軍,假如進軍攻戰不利,怎麼回軍?不如北麵聯合突厥,南麵與唐結交,在此一方稱王稱霸,才是長遠之計。”劉武周不聽,留範君璋守衛朔州,自己率軍南下。劉武周失敗後,流著淚對範君璋說:“我沒有采納你的意見,以至於到了現在這種地步。”過了一段時間,劉武周策劃從突厥逃回馬邑,事情泄露,被殺。突厥人任命範君璋為行台,統領劉武周的餘部。
經過半年艱苦卓絕的戰鬥,李世民圓滿完成使命,收複了並、汾舊地,消滅了又一個“爭天下”的強大敵人,為鞏固新建的唐朝政權立下了卓越功勳。戰役結束以後,李世民升李仲文為並州太守,自己率大軍凱旋而歸。