武德四年十二月丁卯日,唐高祖命秦王李世民、齐王李元吉统率大军征讨刘黑闼。
武德五年(622)正月,刘黑闼自称汉东王,改元天造,定都相州。以范愿为左仆射、董康买为兵部尚书,高雅贤为右领军,征王琮为中书令,刘斌为中书侍郎,窦建德时期文武官员悉复本位。其设法行政,全部效法窦建德,而攻战勇决尤有过之。
正月,刘黑闼放弃相州退保洺州,李世民进军肥乡。幽州总管罗艺率所部数万人马与李世民会合,刘黑闼遽还,唐军大败刘黑闼弟刘十善的军队,俘斩八千人二月,刘黑闼引兵还攻洺水,被唐将秦叔宝大败。唐将王君廓驻守洺水,该城“四旁皆有水,广五十余步”。刘黑闼攻沼水甚急,于城东北筑二甬道以攻之。李世民三次引兵救援,都被刘黑闼抵拒,不得前进。李世民担心王君廓坚守不住,召诸将谋划。李世劫说:“若甬道达城下,城必不守。”行军总管罗士信请求代替王君廓守城。世民登上城南高冢,用旗帜招王君廓,王君廓率部力战,冲围而出。罗士信率二百人乘势入城,替代王君廓固守洺水。刘黑闼昼夜攻城不止,恰逢天降大雨,唐朝救兵无法前往。前后八日,洺水被攻陷,罗士信被俘,不屈被杀,时年二十岁。
辛巳日,李世民攻克沼水。三月,李世民与罗艺于洺水之南安营,刘黑闼多次挑战,李世民坚壁不出,另派兵断绝刘黑闼的粮道。李世民与刘黑闼在沼水附近相持两个多月,双方各有小的胜负。刘黑闼夜袭李世劫兵营,李世民引兵救援,被刘黑闼所包围。危急之时,尉迟敬德率壮士突围而入,将李世民救出重围。李世民估计刘黑闼粮尽,必定前来决战,便事先在洺水上游截断水流,准备水淹敌军。刘黑闼率骑步兵二万南渡洺水,与唐军展开殊死决战。刘黑闼见势不能支,便事先逃走,而他的部下尚不知道,仍在搏斗。唐军决堤放水,河水大至,深丈余,唐军斩首万余人,溺死数千人。