The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION
Some errors automatically rollback the transaction.  See generally 
Error and Transaction Handling in SQL Server

And if your error already rolled back the transaction, the first line of your catch block will throw this error.  

So replace

  ROLLBACK TRANSACTION REALLOCATE;


with

 if @@trancount &gt; 0 ROLLBACK TRANSACTION;


(Remove the 'REALLOCATE' label because this will NOT roll back only the nested transaction.  A Nested Transaction can have a name, but cannot be individually rolled back.  For that you would need a savepoint, but that's probably not the issue here).