It depends on the type of game you are trying to create.
2. Create each frame a new sprite then use SetPosition, SetSubRect & Draw for each tile and destroy the sprite once the job is done.
I've tried this some time ago. It worked but was a bit slow (where slow can be seen relative). But for a game like SimCity it should be sufficient.
To me, the best solution would be to store one sprite per tile and just draw them each frame.
This can be quite memory consuming for big maps. But it depends on your target hardware.
My current attempt is to store an integer for each tile and then to calculate its texture coordinates in the rendering loop and blit it to the screen using OpenGL directly.
This methods kicks ass (ca. 4 times faster than the method above and can handle really big maps).
Another method would be to create a tileset class storing a sprite for each tile and precalculating their subrects.
In the render-loop, you would only have to decide which sprite should be drawn at which position. Or maybe creating a tile class that inherits sf::Sprite.
But as said above, it heavily depends on what you are trying to achieve.