J'ai une table de serveur SQL:SQL récursif Calculée Date de
CREATE TABLE [Workflow].[MilestoneDate](
[MilestoneDateId] [int] IDENTITY(1,1) NOT NULL,
[SpecifiedDate] [datetime] NULL,
[RelativeDays] [int] NULL,
[RelativeMilestoneDateId] [int] NULL,
CONSTRAINT [PK_MilestoneDate] PRIMARY KEY CLUSTERED
(
[MilestoneDateId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [Workflow].[MilestoneDate] WITH CHECK ADD CONSTRAINT [FK_MilestoneDate_MilestoneDate] FOREIGN KEY([RelativeMilestoneDateId])
REFERENCES [Workflow].[MilestoneDate] ([MilestoneDateId])
GO
ALTER TABLE [Workflow].[MilestoneDate] CHECK CONSTRAINT [FK_MilestoneDate_MilestoneDate]
et il a des données qui pourraient ressembler à:
Id Date RelDays RelId
49 2010-03-04 00:00:00.000 NULL NULL
746 NULL 6 46
747 NULL 20 746
46 2010-02-18 00:00:00.000 NULL NULL
48 2010-04-04 00:00:00.000 NULL NULL
47 2010-05-04 00:00:00.000 NULL NULL
748 NULL 14 48
Ce que je dois pouvoir le faire est d'obtenir la valeur calculée date pour chaque ligne qui est soit la date s'il y en a un, soit la date de l'élément "parent" (en utilisant le RelId) plus les RelDays (qui peuvent être récursifs). Par exemple, la date calculée pour l'ID 747 est de 20 jours + 6 jours + 2010-02-18 et donc 2010-03-16.
Chaque fois qu'il ya quelque chose qui doit être résolu de façon récursive dans SQL, vous devez utiliser une procédure stockée ou une fonctionnalité de requête récursive. SQL Server a quelque chose appelé Common Table Expressions qui peut vous aider. –