Titta på att använda vad som kallas en CTE (common table expression) (Se MSDN-dokumentet):
;with cteAppointments as (
select AppointmentID, PersonID, PrevAppointmentID
from Appointments
where PrevAppointmentID is null
union all
select a.AppointmentID, a.PersonID, a.PrevAppointmentID
from Appointments a
inner join cteAppointments c
on a.PrevAppointmentID = c.AppointmentID
)
select AppointmentID, PrevAppointmentID
from cteAppointments
where PersonID = xxx