KANSAS CITY, Mo. -- Brian Bannister is starting to put together some very impressive outings.
Bannister held the Rangers to four hits, striking out six and walking two. The right-hander won his last start in Detroit, when he also went seven innings and gave up four hits. He allowed a run in that one.
"I think it was very similar to the Detroit outing last time," Bannister said. "I had the same approach and kind of the same results. I think the hitters were pretty patient at first and made me work, got a couple of hits here and there.
"I think I eventually got them to swing earlier in the count and start working more game, which was the plan."
Sammy Sosa hit his team-leading 16th homer and the 604th of his career with two out in the eighth to snap the Royals' 17-inning scoreless streak. Joakim Soria became the 366th big league pitcher to yield a home run to Sosa, whose previous homer against the Royals came July 18, 2000, off Blake Stein.
Acquired last December in a trade with the New York Mets for reliever Ambiorix Burgos, Bannister (7-6) threw a season-high 116 pitches, 76 for strikes, before being replaced by Soria to start the eighth. Bannister retired 12 straight after Sosa's single in the third inning. With Sosa on first and Michael Young on second, Mark Teahen ran down Marlon Byrd's long fly to right-center.
"I think that was one of the biggest plays of the game," Bannister said. "I tried to throw it past him and he got good wood on it, but just not good enough, and Teahen was able to run it down."
Rangers manager Ron Washington credited Bannister with pitching a great game.
"Bannister didn't give us much. We had a couple of opportunities, but he did not give in to it," Washington said.
After Mark Grudzielanek singled and Teahen walked, Butler homered to center in the first off Jamey Wright to give Kansas City a 3-0 lead. Butler, the Royals' rookie designated hitter, is batting .351 with six doubles, three home runs and 24 RBI in 19 games.
"It was a slider that he got up, not where he wanted to throw it," Butler said. "I'm glad I didn't miss that."
Wright said Butler hit a breaking ball.
"He was sitting on it," said Wright, who had not allowed a home run since June 16, a span of five starts.
Wright (3-3) lost for the first time since June 29, giving up five runs and 10 hits in 6 1/3 innings with four walks and two strikeouts. He has not had a start this season where he has struck out more than he has walked.
The Royals got another run in the third when Teahen, who led off the inning with a double and advanced to third on Butler's ground out, scored on Ross Gload's sacrifice fly.
The Royals increased their advantage to 5-0 in the seventh when John Buck, who snapped an 0-for-12 skid with a leadoff single, scored on Grudzielanek's third hit.
Alex Gordon doubled home Gload in the eighth for the final Kansas City run.