Consulta recursiva de SQL Server

Soy nuevo en el desarrollo de SQL Server. La mayor parte de mi experiencia se ha hecho con Oracle.

supongamos que tengo la siguiente tabla que contiene objetos Citas

CREATE TABLE [dbo].[Appointments]( [AppointmentID] [int] IDENTITY(1,1) NOT NULL, ....... [AppointmentDate] [datetime] NOT NULL, [PersonID] [int] NOT NULL, [PrevAppointmentID] [int] NULL, CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED ([AppointmentID] ASC) 

Se puede posponer una cita para que, cuando esto suceda, se cree una nueva fila en la tabla con el campo PrevAppointmentID que contenga el ID de la cita original.

Me gustaría hacer una consulta para obtener el historial de citas de una persona. Por ejemplo, si la designación con ID = 1 se pospone dos veces, y estas postergaciones han creado citas con ID = 7 e ID = 12 para el mismo PersonID, me gustaría realizar una consulta que arroje los siguientes resultados:

 AppointmentID PrevAppointmentID ----------------- ---------------------- 1 NULL 7 1 12 7 

Si uso Oracle, recuerdo que se puede obtener algo como esto usando la cláusula CONNECT BY PRIOR.

¿Hay alguna manera de hacer una consulta para lograr estos resultados?

Estoy usando SQL Server 2005/2008.

gracias por adelantado

Examine el uso de lo que se denomina CTE (expresión de tabla común) (Consulte el documento de MSDN ):

 ;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 
Intereting Posts