The Padres erased a 6-5 deficit with four runs in the bottom of the fifth on Crespo's homer and Ray Lankford's two-run single.
In the top half, Todd Zeile smacked a grand slam off Cliff Bartosh, erasing San Diego's 5-2 lead. Bartosh picked up the win despite allowing four runs in his only inning.
Juan Uribe, who was three for three for the Rockies, delivered an RBI single and Mike Bell added a sollo homer in the ninth before Mike DeWitt recorded the final three outs for the save.
San Diego starter Kevin Jarvis yielded two runs and seven hits over four innings.
The Padres scored four runs in the bottom of the first, taking advantage of a rough outing by Mike Hampton, who surrendered five runs and four hits over just 1 1/3 innings. He also walked five -- all in the first inning.
Colorado closed to 4-2 in the second on Gary Bennett's RBI double and Hampton's run-scoring single. The Padres got back one in the bottom half on Ron Gant's RBI double.