KANSAS CITY, Mo. -- The White Sox had the right reliever on the mound with the game tied in the eighth inning Saturday, especially when some miscommunication in the outfield allowed the Royals to put a runner on third base with one out.
Jesse Crain calmly retired Salvador Perez on a popup and then struck out Lorenzo Cain to end the threat, his 29th straight scoreless appearance -- and one that kept Chicago in the game.
"Luckily we had Jesse in there," White Sox manager Robin Ventura said. "You make a mistake and you have a guy in there who can still get you out of it."
It wound up being a decisive moment when Alejandro De Aza drove in Jordan Danks with a sacrifice fly in the top of the ninth, sending the White Sox to a 3-2 victory over Kansas City.
"I always have the feeling out there that I'm going to get through it no matter what," said Crain, who hasn't allowed a run since April 12. "Just make the best pitch you can."
Addison Reed handled a perfect ninth for his 21st save.
Mike Moustakas and Salvador Perez provided the only runs for the slumbering Royals, who have dropped four straight since climbing back to .500.
"The difference in the game was that we both had the same situation late -- had the winning run on third base -- and they executed and we didn't," Royals manager Ned Yost said.
Crain (2-1) may have made the clutch pitches, but it took a bunch of critical at-bats for the White Sox to escape with their second straight win in the three-game series.
Dayan Viciedo led off the ninth with a single off Aaron Crow (3-3), and Jeff Keppinger drew a walk to reach base for the fourth time. Yost brought in closer Greg Holland, and he got pinch-hitter Gordon Beckham to fly out to center field.
That allowed Danks, who was pinch-running for Viciedo, to reach third base. De Aza laid off a couple of pitches out of the strike zone, and then ripped a fly ball to right field that was just deep enough to allow Danks to slide home ahead of the throw with the go-ahead run.
It was the 25th one-run game the White Sox have played this season.
"It seems like we're always on the losing end of one-run games, so fundamentally to get a sac fly to get the winning run, it's a good feeling," Keppinger said. "Hopefully we can build off it."
The Royals struck first when Miguel Tejada, starting at second base for the ninth time in his 16-year career, hit a two-out single in the second inning. The 39-year-old then chugged all the way around on a double by Moustakas to give Kansas City the early lead.
It was the first RBI for Moustakas since May 23.
The White Sox threatened in the third when Keppinger singled and Tyler Flowers walked to start the inning. Alex Rios hit a ball down the right-field line that fell foul by just a couple of feet, and then he struck out looking to keep the White Sox off the scoreboard.
At least until the fourth.
Adam Dunn, who was hitting .186 coming into the game, walked leading off the inning. Paul Konerko followed with a single up the middle, and Conor Gillaspie's slow roller up the middle was enough to drive in Dunn with the tying run.
Wade Davis nearly escaped the inning when he got Viciedo to ground into a double play, but Keppinger delivered a single to right that gave the White Sox a 2-1 lead.
Kansas City was poised for a big sixth inning, tying the game on a single by Perez and putting runners on first and second with one out. But reliever Matt Lindstrom entered the game and got Cain to ground into a double play on his first pitch to end the threat.
"It's baseball, man. It's a hard game," Moustakas said. "Sometimes you get the job done, sometimes you don't get it done, and that's just kind of how it turns out."
White Sox starter Jose Quintana wound up going 5 1-3 innings, while Davis made it through seven innings on the warm afternoon. He also gave up two runs for the Royals.
"Tough loss," Davis said, "having a tie game in the ninth inning."
NOTES: The Royals (34-38) dropped to 11-33 when scoring three runs or fewer. ... Keppinger started at 2B in place of Beckham and finished 3 for 3. ... The White Sox secured their first series win since May 24-26 at Miami. ... The Royals activated OF Jarrod Dyson (right high ankle sprain) from the DL and optioned 2B Chris Getz to Triple-A Omaha. ... RHP Dylan Axelrod goes to the mound for the White Sox in Sunday's series finale. RHP James Shields starts for Kansas City.