3
我有一個SQL Server表:SQL遞歸計算的日期
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]
,它有可能像數據:
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
我需要能夠做的是讓計算日期如果有一個日期,或者是「父」項的日期(使用RelId)加上RelDays(可以是遞歸的),則該日期是每行的日期。
因此,例如,計算日期ID 747是20天+6天+ 2010-02-18,因此2010-03-16。
每當有一些需要在SQL遞歸解決,您需要使用存儲過程或遞歸查詢功能。 SQL Server有一些叫做Common Table Expressions的東西可以幫助你。 – 2010-04-20 13:56:28