If you really want to break this habit, you're going to have to designate a place for her to sleep every night (her crib or a big-girl bed), and let her cry it out. If you break down and let her sleep in your bed or the couch, she will always know that this is a possibility and will cry more in the hopes that you will give in. This might be a few rough nights, but it will be worth it in the end if you really want her to sleep in her own bed consistently.
The cry-it-out method we used was as follows: go into her room at the first fuss to say, "It's bedtime now, good night, I love you." The less talking and emotion, the better. You want to teach her that after bedtime, you are boring! Do the same five, ten, and then fifteen minutes later if she is still crying. Then, go every fifteen minutes until she falls asleep. My daughter was persistent, and this sometimes took over an hour but rarely more than two. Sometimes, we actually found that the more we went in, the worse the crying got--it just riled her up. So, sometimes we only went in a few times to let her know we were there and just let her cry it out from there.
If she makes herself sick (my daughter did this also), go in and clean up the mess with little to no emotion or talking. She will quickly learn that this does not get her any extra attention.
As far as the big-girl bed, you can try this if you think she's ready. We waited until our daughter was nearly three. At this age, she really wanted a big-girl bed, and we used it as the big reward for becoming potty trained. If you put her in the big bed, she'll probably leave it to come to your bed or the couch. We found that a pressure gate on the door is great. It keeps them in their room but allows the door to stay open for extra reassurance. Good luck--I know this is tough!