Что-то я не понял ваших таблиц.
Принимаю их, как:
users(id_user, name, cash)
items(id_item, item, price)
user_item(id_user,id_item)
Так же совершено непонятна архитектура вашего приложения, но если вы не хотите её пересматривать, то создайте "костыль" в виде таблицы транзакций:
transactions([id_tran,id_user,id_item,status)
Как вариант поля статус
0 - открыта транзакция
1 - успешно завершена
2 - ошибка
При "покупке" перед открытием транзакции (ваш
BEGIN TRAN BUYITEM) проверяйте поле [status] для пользователя и в мягком варианте не проводите следующие операции, а в жестком сбрасывайте самую первую, наказывая пользователя за "хитрость" (но тут надо хорошо поработать над исключениями).
Кстати, можно будет хранить историю "покупок":
user_item(id_user,id_item,id_tran)
А таблицу транзакций упростить до:
transactions([id_tran,id_user,status)
DISCLAIMER: Всё что я выше написал плохой тон и лучше изменить архитектуру приложения. :)