যদি আপনাকে কোনও ফাংশন ব্যবহার করতে হয় (আপনার ইটিএল সরঞ্জামটির সীমাবদ্ধতা যেমন আপনি বোঝাচ্ছেন), আপনি OPTION
একটি মাল্টি-স্টেটমেন্ট টেবিল-মূল্যযুক্ত ফাংশনের অংশ হিসাবে নির্দিষ্ট করতে পারেন , উদাহরণস্বরূপ:
CREATE FUNCTION dbo.udf_MyFunction ( @StartID INT )
RETURNS @tv TABLE
(
id INT
)
AS
BEGIN
WITH Episodes( xlevel, PersonID, EventID, EpisodeID, StartDT, EndDT ) AS (
-- Anchor case - the first EventID for each person.
SELECT 1 AS xlevel, PersonID, EventID, @StartID, StartDT, EndDT
FROM dbo.EventTable
WHERE EventID = @StartID
UNION ALL
SELECT xlevel + 1, et.PersonID, et.EventID, c.EventID + 1, et.StartDT, et.EndDT
FROM Episodes c
INNER JOIN dbo.EventTable et ON c.PersonID = et.PersonID
AND et.EventID = c.EventID + 1
--WHERE c.EventID <= (@StartID + 99)
)
INSERT INTO @tv
SELECT PersonID
FROM Episodes
OPTION ( MAXRECURSION 1000 )
RETURN
END
GO
আপনার ইটিএল সরঞ্জামগুলি করার পরামর্শ দেওয়ার সাথে সাথে এটি দৃশ্যে আবৃত অবস্থায়ও আমার পক্ষে কাজ করেছিল। এই সিস্টেম-ব্যাপী কোনও পরিবর্তন করার কোনও উপায় নেই, তবে পুনরাবৃত্তি যেমন অক্ষম হতে পারে, সম্ভবত এটি খুব ভাল জিনিস। OPTION
আপনার উদাহরণ হিসাবে যেমন আপনি একটি ইনলাইন টেবিল-মূল্যবান ফাংশনটির শরীরে কোনও কোয়েরি ইঙ্গিত (ব্যবহার করে ) নির্দিষ্ট করতে পারবেন না ।
যখন আপনি আপনার এপিসোডগুলি গ্রহণ করেন এবং আংশিক সারণীতে আউটপুট সংরক্ষণ করেন কেবল তখনইক্রমক্রমকে হাঁটাতে আপনার প্রক্রিয়াটি পরিবর্তনের বিষয়ে বিবেচনা করুন। এটি করার জন্য আপনি কোনও সঞ্চিত প্রোক ব্যবহার করতে পারেন তাই এটি এই সীমাবদ্ধতার মধ্যে চলে না।
আমিও মনে করি আপনার কোডে কোনও ত্রুটি থাকতে পারে: আপনার সিটিই যদি ব্যক্তির সাথে যোগ হয় এবং ইভেন্ট আইডে পুনরাবৃত্তি করে, ইভেন্ট 101 এর দ্বি আমার উপস্থিতি সদৃশ হিসাবে উপস্থিত হবে। সম্ভবত আমি আপনার কোডটির ভুল ব্যাখ্যা করেছি, আপনি কী ভাবছেন তা আমাকে জানান।
আছে HTH