宋太宗太平兴国三年（978年）戊寅科状元，为将作监丞，通判升州，迁左拾遗。因上《河平颂》触怒太宗，贬为殿中丞。又上《平燕议》，建议收复燕云十六州，受太宗赏识。以尚书户部员外郎身份知制诰。受好友马周牵累，贬之坊州团练副使，又因私见宋白，徙绛州。最后因宦官王继恩谋废太子事败，被贬为散官。晚年有目疾，双目失明，以秘书省少监身份致仕。居襄州。因家境贫困，死后无以为敛，朝廷遂赐钱二十万。着有《汉春秋》、《五代史略》、《将帅要略》、《演圣通讼》、《唐乘》、《家传》等，皆佚。