Only delete the gameobject ONCE

I want to destroy OBJ001 ONCE it’s entered the 2000exp, how could i fix my script part to get it to that?

if(GM.enemy_exp >= 2000)
		{

			if(BuildSpots[0].tag == "TurretSpotClosed")
			{
				Destroy(OBJ001);//destroy the object only once
				BuildSpots[0].tag = "TurretSpotOpen";
				OBJ001 = Instantiate(Turrets[1], BuildSpots[0].position, Quaternion.identity)as GameObject;
				BuildSpots[0].tag = "TurretSpotClosed";
			}
		}
		else if(GM.enemy_exp >= 600)
		{
			if(BuildSpots[0].tag == "TurretSpotOpen")
			{
				OBJ001 = Instantiate(Turrets[0], BuildSpots[0].position, Quaternion.identity)as GameObject;
				BuildSpots[0].tag = "TurretSpotClosed";
			}
		}

You might be able to use the name/tag of the OBJ001 to solve it. Otherwise, you will be creating/destroying objects like mad.
I like revolute’s idea of a bool, but since it seems that you have several levels, I would recommend an enum. I’m assuming this is some kind of tech-level advancement for an RTS or similar. So this is how I would approach it:

enum Tech{Level0,Level1,Level2};
Tech currentTech=Tech.Level0;
GameObject OBJ001=null;

...

if (currentTech==Tech.Level0 && GM.enemy_exp >= 600)
{
  // create OBJ001
  currentTech=Tech.Level1;
}
if (currentTech==Tech.Level1 && GM.enemy_exp >= 2000)
{
  // delete old OBJ001
  // create new OBJ001
  currentTech=Tech.Level2;
}
// and so on.

Is the above code running in the Update() function? If so, why not put it in the same function that adds the exp (or call it from that function)? This way it will only check for >2000 when it has added to the variable.