The bill must now pass by a two-thirds majority in the House of Representatives before being sent to the governor for approval.
The flag is seen by some as an icon of slavery and racism while others say it symbolises US heritage and history.
The flag was originally the battle flag of the southern states in the American Civil War when they tried to break away to prevent the abolition of slavery.
The debate over its use was reignited after Dylann Roof, the 21-year-old charged with killing nine black people on 17 June, was pictured flying the flag.
Emotional debate
The bipartisan bill would remove the flag from the South Carolina State House, where the legislature sits.
The bill passed a crucial second reading by an overwhelming vote of 37-3 on Monday after an emotional debate in the state Senate.
Several Senators said they had been inspired by the Christian forgiveness displayed by relatives of those who had died at the Emanuel AME Church on 17 June.
"If they could be peacemakers in those dire circumstances... I determined I can be a peacemaker when it comes to a flag flying on our State House grounds," Republican Senator Chip Campsen said.
But Senator Lee Bright, also a Republican, said he feared the tragic event was being used to destroy southern history.
"I do understand that what happened in Charleston got a lot of people`s attention," he said. "But I believe we`re placing the blame of what one deranged lunatic did on people that hold their southern heritage high and I don`t think that`s fair."
The bill now faces a final reading on Tuesday before it is taken up by the lower House of Representatives.
Republican Governor Nikki Haley, who must approve the bill for it to come into effect, called for the flag`s removal in light of the Charleston attack.
More about: