PDA

View Full Version : مشکل با کوئری بازگشتی recursive query



stabesh
سه شنبه 22 دی 1394, 11:40 صبح
با عرض سلام
من یک جدول دارم که شماره جدید و قدیم کالا ها رو نگهداری می کنه

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

لطفا بگید کجای کارم ایراد داره
لینکای زیرم خوندم
https://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx
http://stackoverflow.com/questions/1757370/recursive-same-table-query-in-sql-server-2008
http://www.codeproject.com/Tips/674287/Recursive-Queries-in-Microsoft-SQL-Server

stabesh
پنج شنبه 24 دی 1394, 11:36 صبح
خوب فهمیدم جوابشو باید به جای مساوی با null از is null استفاده کرد
:اشتباه: