Roy Halladay gave up a grand slam to Yadier Molina in an abbreviated two-inning start before leaving with shoulder soreness, and the St. Louis Cardinals avoided a four-game sweep with an 8-3 win over the Philadelphia Phillies Sunday. Halladay (4-5) departed with a 3.98 ERA after an outing that matched the second-shortest outing of his career. The team said the two-time Cy Young award winner was taken out as a precautionary measure and that he'll be re-evaluated in the next few days. Carlos Beltran hit his NL-leading 15th home run for St. Louis and rookie Matt Adams hit the first of his career. Pirates 10, Cubs 4: The Chicago Cubs lost their 12th straight game as Pedro Alvarez, Andrew McCutchen and Garrett Jones homered for Pittsburgh. Reds 7, Rockies 5: Brandon Phillips hit a three-run homer to help the Cincinnati Reds outslug Colorado in a game that set a record for Great American Ball Park with nine home runs. Giants 3, Marlins 2: Melky Cabrera tied a career high with four hits, including a home run, and scored all three runs for the San Francisco Giants to help Matt Cain beat Miami. Mets 2, Padres 0: R.A. Dickey struck out 10 and reached double digits for strikeouts in consecutive games for the first time in his career and the New York Mets held San Diego scoreless for the second straight day. Dodgers 5, Astros 1: Jerry Hairston Jr. got a career-high five hits, Chris Capuano won again and the Los Angeles Dodgers beat Houston. Diamondbacks 4, Brewers 3: Aaron Hill doubled twice and singled as the Arizona Diamondbacks rallied past Milwaukee. Nationals 7, Braves 2: Bryce Harper hit his second homer in two days, Gio Gonzalez gave up only one hit in seven innings and the Washington Nationals beat struggling Atlanta to complete a three-game sweep.