武德四年(公元621年),太宗又进驻青城宫。唐军的营垒还没有建好,就有王世充的军队两万人从洛阳的方诸门出战,面对着谷水列开阵势。太宗命精锐骑兵在北邙山布阵,让屈突通率领五千名步兵渡过谷水去进攻王世充,并叮嘱屈突通说:“等到两军交战时就放起烟来,我就率领骑兵向南冲下。”敌我两军才交战,太宗就带着骑兵冲锋,自己奋不顾身冲在前面,与屈突通内外配合。贼军拼命抵抗,数次打散又数次聚集起来。从早晨七点钟一直打到下午一点钟,贼军才开始后撤。太宗挥军追击,俘获和杀死敌军共八千人,于是进军到城下扎营。王世充不敢再出城作战,只好环城坚守,以等候窦建德的援兵。太宗分派各路人马挖掘壕沟,环绕着洛阳城布防,准备长期围困。
这时,吴王杜伏威派出自己的大将陈正通、徐召宗率领两千精兵赶来,与唐军在太宗的军营会合。伪郑州的司马沈悦从武牢城前来投降,将军王君廓前往接应,活捉了伪荆王王行本。
恰好,窦建德这时领兵十余万,前来救援王世充,抵达了酸枣。萧瑀、屈突通、封德彝都担心腹背受敌,恐怕不是上策,提出撤至谷州再观察形势的变化。太宗说:“王世充的粮食已经吃完,内外离心离德,我军无需攻击,就可坐等敌人衰亡。窦建德最近刚刚攻破孟海公,将领和士兵们既骄傲又懈怠,我军应当进占虎牢关,控制这个战略要点。窦建德如果冒险前来与我军决战,我们一定能攻破他的军队。如果他不出战,十天内王世充应该会自己崩溃。如果不赶快行动,贼军一旦进入了虎牢关,各城最近才归附,势必难以坚守。窦建德和王世充这两股势力一旦会合,又能把他们怎么样呢?”屈突通又建议解除对洛阳城的围困,暂时转移到险要的地方以等候敌军内部的变化,太宗也不同意。于是,太宗让屈突通留下,帮助齐王李元吉继续围困王世充,自己率领三千五百名骑兵赶往虎牢关。
窦建德的军队从荣阳西进,在板渚建筑营垒,太宗则驻军于虎牢关,双方相持了二十多天。侦察兵向太宗报告:“窦建德正在等侯官军给马吃的草料用尽,在黄河北岸放马吃草时,趁机偷袭虎牢关。”太宗知道了窦建德的打算后,故意放一些马在黄河北岸吃草以引诱敌人出击。凌晨,窦建德果然率领全军赶来,在汜水边摆开阵势,王世充的大将郭士衡在他们的南面列阵,前后连绵好几里地,大声呐喊,众将大为害怕。太宗带着几名骑兵登上了高高的土丘观察敌军,对众将说:“贼军从山东地区起兵,从没有遇到过强大的敌军。现在,他们正在渡过险要之处却在叫嚣,这是没有军令的表现;逼近城墙列阵,有轻视我们的意思。
我军暂时按兵不动,敌军的锐气便会衰退,列阵时间太长士卒饥饿,一定会自己后撤,那时我们再发兵追击,就可以战无不胜了。我与你们约定:‘一定在午时以后大败敌军。”’窦建德摆好阵势,从上午七点一直等到下午一点,士兵们又饿又累,都在阵列中坐下来,并争着喝水,片刻间又收缩退却。太宗说道:“可以发起攻击了!”于是,太宗亲自率领轻骑兵追击,以引诱敌军,众将陆续赶到。窦建德要回师列阵,阵列还没整顿好,太宗先行发动攻击,他冲到哪里,哪里的敌军就纷纷溃散。不一会,各路军队配合作战,战场上尘土飞扬,叫声四起。太宗亲自率领史大奈、程咬金、秦叔宝、宇文歆等人挥舞着大旗冲人,直接冲到敌军阵后,悬挂起唐军的旗帜。贼军回头见了,大溃逃散。太宗挥军追击了三十里,斩杀敌人三千多,俘虏敌军五万人,在战斗中将窦建德生擒活捉。太宗当即责备他:“我兴师问罪,本来只是针对王世充,王世充的得失存亡,与你无关,为什么要越过边境而冒犯我的兵锋?”窦建德很害怕,两腿发抖地说:“现在我自己要不来,恐怕会麻烦你远远地去消灭我!”高祖得知后大喜,亲手写诏书说:“隋王朝的统治土崩瓦解,崤山和函谷关使得东西隔绝。窦建德和王世充这两支强大的势力联合,一朝就被平定。我军既已获胜,再没有死伤。做人臣的不感到惭愧,做君父的不为此担忧,这都是你的功劳啊!”太宗于是把窦建德带到了东都洛阳的城下。王世充见后十分恐惧,只好率领自己手下的大小官员两千多人,来到太宗的军门前请求归降。至此,崤山以东的地区全部被平定。太宗进入洛阳,占据了宫城,命令萧瑀、窦轨等人负责封存和守卫府库,什么东西也不取走,只是命令秦王府记室房玄龄负责收取隋朝的地图与户籍。在这时,太宗下令将与王世充一起作恶的段达等五十余人处死,无辜被囚禁的人一律释放,对于无罪而被杀的人加以祭祀并写祭文哀悼。太宗用酒食隆重款待各位将士,并按品级分别赏赐财物。高祖命令尚书左仆射裴寂去军中慰劳。
六月,太宗凯旋。太宗亲自披挂着用黄金做的铠甲,排列铁骑兵一万人,身穿铠甲的士兵三万人,前后部都敲鼓吹号,将俘获的两位伪君主窦建德、王世充以及隋朝的器物和皇帝用的车辆敬献给太庙。高祖认为,自古以来旧的官阶与太宗所立下的特殊功劳都不相称,于是另外建徽号,以表彰太宗的功勋和德望。十月,高祖给太宗加上“天策上将军”的封号,担任陕东道大行台尚书令之职,地位在其他王公之上;给太宗增加封邑两万户,再算上以前的共计三万户;赐给金车一辆,一套王公的衮衣和冠冕,一双玉璧,黄金六十斤,前后部鼓吹以及九部乐,带到的仪仗队四十人。
这时,天下逐渐太平,太宗于是专心阅读书籍,开设文学馆以接待四方有才学的人。以陕东遵大行台司勋郎中杜如晦等十八人担任文学馆学士,每次在阁下轮流值班,太宗则以温和的态度与他们一起讨论经义,偶尔谈论到半夜才结束。
没多久,窦建德的旧将刘黑闼举兵反叛,攻占了湍州城,十二月,太宗统率全军去征讨他。武德五年(公元622年)正月,太宗进兵肥乡县,并分兵切断刘黑闼的粮道,两军对峙了两个月之久。刘黑闼因军粮将尽,被迫求战,率领步兵和骑兵两万人,向南渡过洺水,一早便逼近了唐军。:赶宗亲自率领精锐的骑兵,攻击刘黑闼的军马,将他们打得大败,又乘胜冲撞贼军的步兵,敌军崩溃,死亡一万多人。太宗预先派人在上流筑坝堵塞洺水,洺水变浅,使刘黑闼得以涉水过来。等到开战时,才下令挖开堤堰,大水冲下,有一丈多深,敌军已经大败,逃到水里的都被淹死了。只有刘黑闼率领骑兵两百多人逃往突厥,他的军队全部被太宗俘虏,河北地区宣告平定。当时,徐圆朗在徐、兖二州拥兵作乱,太宗便回军将他讨平。至此,黄河、济水、长江、淮河地区都平定了。十月,高祖加授太宗左、右十二卫大将军的职务。
武德七年(公元624年)秋,******汗国的颉利可汗和突利可汗从原州入侵,侵略和骚扰关中地区。有人对高祖说:“只是由于御府的珍藏、子女、金帛都集中在京师长安,所以突厥人前来入侵,如果把长安城烧掉,不再定都于此,突厥人自然不会再来侵扰。”高祖于是派出中书侍郎宇文士及去山南地区寻找可以居住的好地方,打算迁都。萧瑀等人都不赞成高祖的这个计划,但终究不敢冒犯龙颜去直言进谏。只有太宗一人说:“霍去病,是汉朝的将帅,尚且立表要消灭匈奴。我很惭愧地被封为王,还让胡人的侵扰没有停止,竟然使得皇上与大臣们商议迁都,这都是我做臣子的责任。
希望皇上让我有机会效力一次,攻取那个颉利可汗。如果在一两年之内我不能将他俘虏,再慢慢商议迁都的策略,那时我再也不敢重说反对迂都的话了。”高祖很生气,但依旧派他率领骑兵三十余人巡视关中地区,并拟定铲平******的计划。太宗回朝时,上奏坚持不可以迁都。高祖李渊这才放弃迁都计划。武德八年(公元625年),又给太宗加授中书令之职。
武德九年(公元626年),皇太子李建成、齐王李元吉计划谋害太宗。六月初四,太宗率领长孙无忌、尉迟敬德、房玄龄、杜如晦、宇文士及、高士廉、侯君集、程知节、秦叔宝、段志玄、屈突通、张士贵等人在玄武门诛杀了李建成和李元吉。六月初八,高祖下诏,立太宗为皇太子,各种政务均由皇太子来决定。太宗于是下令将宫廷猎场所蓄养的鹰犬全部放掉,并停止收取各地进贡的奇珍异宝,施政崇尚简明严肃。全国人民对此非常高兴。太宗又命文武百官各自呈上密封的奏章,对安定人心、治理国家的关键作出详细的陈述。十三日,太宗下令道:“依据礼法,皇帝的两个名字无须为某一个字而避讳。从近代以来,皇帝的两个名字都要避讳,废阙的地方已经比较多,随意避讳也违背了经典。至于官号、人名、公私文籍图书,如果有‘世民’两个字不连续使用的,并不需要避讳。”太宗下令撤销幽州大都督府。
十五日,命令废除陕东道大行台,另外设置洛州都督府;撤销益州道行台,另设益州大都督府。二十六日,幽州大都督、庐江王李瑗图谋造反,将他废弃为平民百姓。二十九日,废除天策府。