Sounds like you need a history table for room changes that should be made most likely through the app layer. I know it's tempting to use built in triggers to just have it log it, but a simple app layer should do the trick.
If you're really concerned about that and you have the CDC option feel free to use that, but I would go with a transaction that logs the current record elsewhere, updates it, and commits with rollback error handling if it fails and a nice error for the end user to take some other step for the customer in the mean time while this error is looked at.
Updating based on question. To do this, you could write a stored procedure that you call from your app which:
-begins a transaction
-copies the current hotel number and occupant id along with a timestamp to a 'getRoomChangeHistory' type stored procedure
-then issue a 'updateRoomChange' type stored procedure so the new value is updated
-Finally COMMIT the transaction. Add Add error handling for failures. If you want a solid auditable way of doing it, this is it. If you want easy, it won't be dependable. For that, why not just save it as a document store somewhere else then if you don't care about ACID compliance?
Here's some more on the matter for SQL 2012 and above using TRY CATCH from Books OnLine to achieve this: