給事并州張楊早年時因為武勇過人被并州刺史丁原任命為武猛從事。漢靈帝末年,天下大亂,漢靈帝以所寵小黃門蹇碩為西園上軍校尉,蹇碩在京都統領軍隊,想要統率四方,於是大肆徵召天下豪傑用為自己的偏將,當時袁紹和曹操都被征為校尉跟隨蹇碩,而丁原則派遣張楊率領士兵去蹇碩那裡去,蹇碩讓張楊暫行軍司馬。虎踞河內中平六年(189年),漢靈帝駕崩,蹇碩被大將軍何進所殺,何進派遣張楊回并州召集兵馬,留在上黨,並平定了上黨的山賊之亂。但何進不久之後就被宦官張讓等誅殺,董卓趁機進京,掌握朝中大權,無惡不作。於是張楊率兵進攻上黨太守於壺關,但未能攻下,於是張楊率所領寇略諸縣,隊伍發展到幾千人。三國志遊戲中的張楊初平元年(190年),張楊率軍參加,山東諸侯組成以袁紹為首的討董聯盟軍。張楊於河內與袁紹軍回合,後與匈奴單于於夫羅屯於漳水,於夫羅想要叛變,但是袁紹和張楊都不肯相從,於是於夫羅挾持張楊奔走,袁紹派遣大將麴義進行追擊,在鄴城南部大破於夫羅軍。於夫羅挾持張楊逃到黎陽,攻破度遼將軍耿祉軍,張楊得以東山再起,於是董卓詔封張楊為建義將軍、河內太守。初平三年(192年),曹操遣從事王必從兗州出使長安朝見漢獻帝,途徑河內時被張楊攔阻,董昭告訴張楊“袁紹、曹操雖是同盟關係,但看情況,是不可能長期聯合下去的。曹操眼下雖然弱小,但卻不愧是一個英雄,應當找機會同他結交。何況現在機會就擺在眼前,應當加以利用,幫助曹操同朝廷接上關係,並上表推薦他。如果事情辦好了,曹操是不會忘記您的好處的。”張楊聽後覺得有理,就立刻照辦了。曹操得知情況後,對張楊果然十分感謝,特地給張楊送去犬馬金帛,張楊也派使者拜見曹操。二納呂布初平四年(193年),呂布被趕出長安後,投奔南陽袁術,袁術因呂布胡作非為而欲除之,呂布因害怕而投奔了張楊。當時李傕郭汜懸賞捉拿呂布,張楊部下都想殺掉呂布。呂布聽說後,對張楊說:“我和你是同州人,你若殺了我對你並沒有什麼好處,不如把我活著交給李、郭二人,這樣你也可以獲得李、郭的恩寵。”張楊認為有道理。於是表面上答應李榷郭汜,實際上保護著呂布不受傷害。然而呂布卻信以為真,不久便投靠了袁紹。興平元年(194年),袁紹暗使人殺掉呂布,呂布從袁紹處逃出後再次投奔了張楊。救援獻帝興平二年(195年),漢獻帝因為李傕、郭汜作亂而流亡至河東,張楊率兵前往安邑救援。百官都很飢餓,張楊使數千人背著米提供食物。被拜為安國將軍,假節、開府,封晉陽侯。當時張楊想把漢獻帝迎回洛陽,但是諸將不肯從,於是張楊回到野王。建安元年(196年),楊奉、董承、韓暹攜帶漢獻帝回洛陽,沒有糧食吃,張楊於是攜帶糧食於回洛陽的路上迎接漢獻帝,和漢獻帝一起回到洛陽。起初,諸將爭權,韓暹攻打董承,董承投奔張楊,張楊令董承先修繕洛陽宮室。七月,漢獻帝回到東都洛陽,住進了楊安殿。張楊認為護駕是自己的功勞,於是以“楊”命名這座宮殿。後張楊對諸將說:“天子應該是和天下人一起的,現在天子有各位公卿大臣的輔佐,我可以在外捍衛大漢朝,怎么可以留在京都呢?”於是張楊又回到了野王。即刻拜為大司馬、假節鉞。後值韓暹擅權弄國,董承秘密召兗州牧曹操入宮勤王。曹操入宮後彈劾韓暹與張楊之罪,漢獻帝因韓暹張楊有護駕之功,讓所有人不要再提這件事。救布被殺建安三年(198年),曹操圍呂布於下邳,張楊與呂布的關係向來比較好,想要去救援,卻失敗了,於是率軍前往東市,遙與呂布成掎角之勢。張楊部下楊醜,將張楊暗殺,欲投靠曹操。而眭固又殺了楊醜,帶領張楊部下屯軍射犬。欲投奔袁紹。曹操因為見形勢不利,為免夜長夢多,派遣史渙、曹仁急攻眭固。眭固自領親兵出奔袁紹,於犬城被史渙等截擊被斬,曹操再圍射犬,眾人皆降。曹操因此吞併河內。
王粲:楊性仁和,無威刑。下人謀反,發覺,對之涕泣,輒原不問。陳壽:張楊授首於臣下,擁據州郡,曾匹夫之不若,固無可論者也。常璩:漢末大亂,雄桀並起。若董卓、呂布、二袁、韓、馬、張楊、劉表之徒,兼州連郡,眾逾萬計,叱吒之間,皆自謂漢祖可踵,桓、文易邁。郝經:①張楊有奉迎之功,據河山之郡而無雄才,卒墮匹夫之手,智不足稱也。②楊雖有功,承實不智,遂敢首禍。
在《後漢書·孝獻帝紀》里,張楊死於建安三年(公元198年)冬十一月,而在《後漢書·董卓列傳》和《三國志·魏書·武帝紀》里,張楊則死於建安四年(公元199年)春二月,司馬光在《資治通鑑》採用“建安三年冬十一月”的說法。
《三國志·魏書七·呂布臧洪傳》《三國志·魏書八·二公孫陶四張傳第八》《三國志·魏書十四·程郭董劉蔣劉傳》《資治通鑑·漢紀五十二》《資治通鑑·漢紀五十三》《資治通鑑·漢紀五十四》《後漢書·靈帝紀》《英雄記》
在小說《三國演義》中,張楊生平與正史大體相當,本為上黨太守,參與討伐董卓的聯軍,為十八路諸侯的第十五鎮,虎牢關之戰時,其部將穆順曾出陣挑戰呂布,反被呂布所殺。後為河內太守,李傕、郭汜之亂後,獻帝回到洛陽,張楊奉上粟帛。曹操討伐呂布時,張楊出兵東市,欲救呂布,被部將楊醜所殺。 window.rsInsertData = window || ; var rsdataList = {"foot":,"top":}; if (rsdataList.top || rsdataList.foot) { rsInsertData.push(); }