با عرض
من یک جدول دارم که شماره جدید و قدیم کالا ها رو نگهداری می کنه در sql server 2008 r2
CREATE TABLE [dbo].[Parts_PartsReplace](
[OldPartNum] [nvarchar](30) NOT NULL,
[NewPartNum] [nvarchar](30) NOT NULL,
[Dscp] [nvarchar](50) NULL,
CONSTRAINT [PK_Parts_PartsReplace] PRIMARY KEY CLUSTERED
(
[OldPartNum] ASC,
[NewPartNum] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
حالا می خوام با استفاده از کوئری بازگشتی تمام شماره های جایگزین رو پیدا کنم اول یک view ساختم که تمام کالا ها رو چه شماره قدیم دارند چه ندارند برمی گردونه
SELECT dbo.Parts_PartsReplace.OldPartNum, Parts_PartsReplace_1.NewPartNum
FROM dbo.Parts_PartsReplace RIGHT OUTER JOIN
dbo.Parts_PartsReplace AS Parts_PartsReplace_1 ON dbo.Parts_PartsReplace.NewPartNum = Parts_PartsReplace_1.OldPartNum
و ازش استفاده کردم تا کوئری بازگشتی زیر رو بنویسم اما کوئری بازگشتی هیچی بر نمگردونه؟!
WITH Parts_PartsReplaceRecursive(OPartNum,PartNum,LEVEL )
AS
(
SELECT OldPartNum,NewPartNum,0 AS LEVEL FROM dbo.Parts_PartsReplaceView WHERE OldPartNum = null
UNION ALL
SELECT OldPartNum,NewPartNum,Level + 1 AS LEVEL FROM dbo.Parts_PartsReplaceView
INNER JOIN Parts_PartsReplaceRecursive AS PR ON PR.PartNum = dbo.Parts_PartsReplaceView.OldPartNum
)
SELECT OPartNum,PartNum,LEVEL FROM Parts_PartsReplaceRecursive