李子雄于是征发幽州三万步兵骑兵,从井陉向西攻击杨谅。当时刘建在井陉包围守将京兆人张祥,李子雄在抱犊山下打败刘建,(胡三省注:《隋志》:恒州石邑县有抱犊山。)刘建逃走。李景被围困一个多月,下诏令朔州刺史代人杨义臣救援。(胡三省注:马邑郡即朔州,与代州接壤。杨义臣本姓尉迟。尉迟迥叛乱时,杨义臣的父亲尉迟崇因宗族关系自囚狱中,高祖安慰释放了他。后来尉迟崇与突厥交战战死,杨义臣年幼,被养在宫中,因父亲忠诚,赐姓杨。)杨义臣率领两万步兵骑兵,夜里从西陉出发,(胡三省注:《新唐志》:代州雁门县有东陉关、西陉关。)乔钟葵全军抵抗。杨义臣因兵力少,收集军中几千头牛羊,又令几百名士兵每人拿一面鼓,偷偷驱赶牛羊,藏在山谷中。傍晚,杨义臣再次与乔钟葵交战,(胡三省注:复,又。)刚交锋,命令驱赶牛羊的士兵快速前进,同时击鼓,尘土漫天,乔钟葵的军队不知情况,以为伏兵出动,于是溃散;杨义臣乘势追击,大败敌军。晋、绛、吕三州都为杨谅守城,(胡三省注:《隋志》:临汾郡霍邑县,后魏设永安郡,开皇十六年设汾州,十八年改吕州。)杨素各用二千人牵制他们后离开。杨谅派部将赵子开率领十多万人,设置栅栏阻断要道,屯驻高壁,(胡三省注:高壁是岭名。将,将领;下同。)列阵五十里。杨素令诸将带兵对阵,自己率领奇兵潜入霍山,(胡三省注:霍山在霍邑东北,也叫太岳山,《禹贡》所说的岳阳指的是这座山的南面。《史记》称霍太山。)沿崖谷前进。杨素在谷口扎营,自己坐在营外,让军司进营挑选三百人留守,(胡三省注:汉、晋称军司马为军司;现在军吏也称为军司。)士兵畏惧北方军队强大,不想出战,多愿留守,因此延误了时间。杨素责问原因,军司如实回答,杨素立即召留守的三百人出营,全部斩杀;再令挑选留守人员,没人愿意留下。杨素于是率军疾驰,到北军北面,直指其营,击鼓放火;北军不知所措,自相践踏,死伤几万人。杨谅任命的介州刺史梁修罗屯驻介休,(胡三省注:隋介州治隰城县,介休县隶属于它。)听说杨素到来,弃城逃走。
杨谅得知赵子开战败,非常恐惧,亲自率领近十万人,在高泽抵抗杨素。遇大雨,杨谅想领军退回,王頍劝谏说:“杨素孤军深入,兵马疲惫,大王亲率精兵攻击,必定能胜。现在望敌而退,显示胆怯,动摇军心,增长西军士气,(胡三省注:杨素的军队从长安来,所以称西军。)希望大王不要退。”杨谅不听,退守清源。(胡三省注:开皇十六年,分晋阳设清源县,在晋阳西南。宋白说:《地理志》:榆次县梗阳乡,是魏戊邑。现在梗阳故城在清源县南一百二十步。该县从汉到晋都属榆次县地,隋设清源县,因县西清源水得名。)
王頍对儿子说:“形势很不好,军队必败,你可跟我走。”杨素进军攻击杨谅,大败敌军,擒获萧摩诃。杨谅退守晋阳,杨素进军包围,杨谅走投无路,请求投降,余党全部平定。炀帝派杨约携带手诏慰劳杨素。王頍将要逃奔突厥,到山中,道路断绝,知道无法逃脱,对儿子说:“我的谋略不亚于杨素,只是建议不被采纳,才到这地步,不能束手就擒,成就小子的名声,我死后,你千万不要投靠亲友。”于是自杀,埋在石窟中。他儿子几天没吃东西,去投靠亲友,最终被擒获;同时找到王頍的尸体,在晋阳枭首示众。
群臣上奏汉王杨谅应处死,炀帝不许,将他削职为民,开除宗族户籍,最终幽禁而死。杨谅部下官吏百姓因受牵连被处死或流放的有二十多万家。起初,高祖与独孤后非常恩爱,发誓不与其他女人生孩子,曾对群臣说:“前代天子沉溺于宠妃,嫡庶争斗,于是有废立之事,甚至亡国;我身边没有姬妾,五个儿子同母,可说是真兄弟,怎会有这种担忧!”炀帝又鉴于周室诸王势弱,所以让诸子分别镇守大镇,在地方专权,权力与皇帝相当。到晚年,父子兄弟互相猜忌,五个儿子都不得善终。
史臣司马光说:从前辛伯劝谏周桓公说:“内宠等同王后,外宠等同朝政,宠子等同嫡子,大城等同国都,这是动乱的根源。”(胡三省注:《左传》中辛伯有此言,狐突引用过。)君主如果能谨慎对待这四点,动乱怎会发生!隋高祖只知嫡庶争斗的麻烦,认为诸王势弱容易动摇,却不知权势相当、地位逼近,即使是同胞至亲,也难免互相倾轧。对照辛伯的话,他只做到一点却忽略了三点啊!
5冬,十月,己卯(十六日),将文皇帝葬在太陵,庙号高祖,与文献皇后同坟异穴。
6下诏免除妇女及奴婢、部曲的赋税,男子二十二岁成年。(胡三省注:隋沿袭周、齐制度,妇女及奴婢、部曲的赋税徭役按给田多少区分;军人二十一岁成年