만주와 한반도 북부를 차지한 고구려는 수에 고개를 숙이지 않았다. 수는 598년에 이어 612년 대군을 보냈는데, 역사서에는 병력이 100만 명이 넘었다고 기록되어 있다(과장되었다는 견해도 있다). 그러나 요동성 등 고구려의 성들은 쉽게 무너지지 않았다.
양제는 별동대 약 30만 명을 뽑아 평양으로 곧장 보냈다. 고구려 장군 을지문덕은 거짓으로 물러나며 적을 깊숙이 끌어들인 뒤, 지쳐서 돌아가던 수군을 살수(청천강으로 추정)에서 공격해 크게 이겼다(살수대첩). 『수서』에는 살아 돌아간 병사가 2,700명뿐이었다고 적혀 있다.
수는 613년과 614년에도 원정했지만 성과가 없었고, 그사이 나라 안에서 반란이 잇달아 일어났다. 618년 양제가 강도(양저우)에서 부하에게 살해되면서 수는 37년 만에 멸망했다. 무리한 전쟁이 대제국을 무너뜨린 셈이다.