乙支文德跑了不打緊,可是這造成了隋軍內部的分歧。皇帝親自囑咐要抓的人居然被放跑了,於仲文急得跳腳,而此時宇文述已經知道軍中缺糧,必須要及時撤退。於仲文當然不答應,要是這麼回去,其他人沒事,他於仲文違犯君令,必然有罪。所以他極力主張繼續追擊,他說:“將軍率領十萬大軍,不能破小賊,有什麼顏麵回去見皇帝?那我此行注定是要無功而返了!”又說:“當年周亞夫擔任將軍的時候,即使是見天子,軍容也不變。全軍都聽命於他一人,所以功成名遂。如今大家都有自己的小九九,如何能消滅敵人?”於仲文用這話擠對住了眾將,逼得宇文述等將軍不得已而派兵繼續進擊,這就壞了大事。
乙支文德在隋軍中已經看出隋軍軍中缺糧,見隋軍追來,就采用疲兵之計。一麵堅壁清野,一麵每一接戰就逃跑,隋軍居然一日之內連勝七仗。他們被接連的勝利所迷惑,急攻猛進,越追越遠,渡過薩水(今清川江),在離平壤三十裏的地方依山紮營。此時乙支文德遣使詐降,聲稱隋軍若肯班師,願將高元送往長安謝罪。宇文述等因將士饑疲已極,平壤城又險固難拔,答允還師。高麗軍趁隋軍後撤,從四麵抄襲,隋軍列方陣且戰且退。七月二十四日,半渡薩水(今清川江)時,高麗軍猛擊隋後軍,擔任後衛的隋將辛世雄戰死,隋軍陷入重重圍困,遼東大地已成死地。九軍之一的沃沮道薛世雄軍在敗退至白石山之際被高麗軍團團包圍達百餘重,四麵矢下如雨。隋軍方麵已斷糧數日,如今為了一個生存的希望奮起最後的力量死拚高麗軍。薛世雄以最後兩百精銳重騎兵向高麗軍決死突擊,高麗軍如林的長矛陣也不能抵擋這些死士,終於陣形動搖,而此時後麵的疲餓隋兵以方陣集中一點進行突破,終於擊破高麗軍陣,而隋軍方麵也幾乎損失殆盡。
見此情形,隋軍諸軍皆潰,失去控製,一晝夜狂奔四百五十裏,高麗軍乘勝追擊。宇文述等退至遼東城時,據《通鑒》的記載居然僅剩下兩千七百人,隋軍屍骨成山,遼東大地血流成河。
當然這並非說隋軍真的僅僅隻剩下兩千七百人生還,同樣《通鑒》中亦記載了“衛文升一軍獨全”,這衛文升一軍就起碼有三萬多人。按照上下文,正確的解讀應該是這兩千七百人為一晝夜狂奔後最先逃回的人數。
至於隋軍真實的損失,如今已不可考,但不管生還多少人,隋軍損失巨大這點是一定的。
此時回過頭來再看當初的整個戰爭態勢,如果來護兒當時不輕敵大意,能占住平壤外城的話,那麼高麗軍也就不可能搞出那麼多花樣;隋軍的陸路大軍即便缺糧,也能從來護兒的船隊那裏得到補給,那麼整個戰略局勢就會完全不同。平壤當時號稱“小長安”,規模不小,若來護兒能占據外城,彙合陸路主力隋軍後,雖然高麗秋冬寒冷,但是有個外城讓紮營,就可以進行長期圍城,平壤就是存糧再多也頂不住這樣長期的圍困,平高麗也就不隻是一句空話了。
隻是此時大勢去矣,不但平壤攻略失敗,遼東城亦未攻下,時間也快八月底了。遼東的氣溫進入秋季就會急劇下降,此時煬帝不想撤軍亦是不能。此次征遼,人力物力耗費巨萬,卻僅僅攻取了遼水西麵的一座小小的武曆邏城,隋改武曆邏城為通定鎮,置了一個空頭的遼東郡,而千萬中國人的血肉卻灑遍了這片白山黑水。