护羌校尉苏则于是固守姑臧,拒不投降。因道路遥远,且天气酷寒,蜀军粮草有限,故而吴懿只得领兵退还雍州。
刘备久攻上邽不下,十分恼怒。正无计可施,恰遇天寒地冻,洒水成冰。参军马谡于是建议修筑冰墙,以抵挡城中箭矢,使蜀军能够安然抵达上邽城下。
刘备大喜,于是趁着严冬冰雪覆盖之际,严令众军烧水浇筑冰墙,混以泥沙,十分结实。冰墙皆修筑一丈五尺高,不断往上邽推进。
不过数日,冰墙已经浇筑到了上邽城下。张既无论是用箭射还是用滚木、礌石去砸,那厚厚的冰墙都并无损坏。蜀军在冰墙的掩护下得以从容越过城外的壕沟,安全冲到上邽城下,随后弓弩手奋起掩护,轻步兵架起云梯,奋勇攻打。
张既挥军拼死反击,仗着居高临下的优势屡次击退蜀军,但终究是孤城难守,众寡悬殊,至十二月二十七日,城中守军伤亡逃散殆尽,城池终于被蜀军攻破。
张既命人焚烧了府库中的存粮,随后力战而亡,其余杨埠、姜叙等人也多战死。梁宽与其子梁绪、梁虔投降刘备,尹奉的侄儿尹赏也归附了蜀军。
刘备派尹赏带着张既的首级以及将士家眷的书信去陇关劝尹奉等人投降。那尹奉全家在马超之乱中被杀,对尹赏这个家族的独苗呵护备至,寄予厚望,如今见尹赏居然投降了刘备,反来劝降自己,尹奉顿时羞怒交加,当场吐血,回到住处后不久便气急而亡。
陇关之内的守军见主将身死,城外的蜀军又带来了张既的首级以及众军失陷在上邽城中的家眷书信,当下商议之后,便即开城投降。
至此刘备拿下了关陇全境。虽然在攻打上邽时死伤近万人,但破城之后收降的曹军也有二三千人,再加上陇关投降的三千曹军以及近来依附而来的羌氐兵,刘备的实力不减反增。
唯一可虑的是上邽存粮被张既临死之前下令烧毁,如今陇右极度缺粮,刘备手中的粮食再千里迢迢运到上邽之后已经只够蜀军自己食用了,抽不出多余的粮食来赈济饥民,以致陇右之地今年大荒,饥民只得向蜀中、关中逃难,沿途饿死无数。逃到蜀中、关中的流民也多沦为了当地豪族的佃户僮仆。
刘备手中无粮,只得对此听之任之。
尽管情况有些不完美,但能够拿下陇右,刘备却也已经颇为满意了。当下留兵把守陇右诸城之后,刘备下令,正式将都城迁到长安,同时命文武官吏都去长安举行大朝会。
半道之上,刘备收到了辗转送来的中原战报,得知庞统、黄忠、马超等人尽皆取得了进展,汉军拿下了许昌、汝南等地,逼得曹丕退往了洛阳。