जैसा कि मार्टिन ने प्रश्न के तहत एक टिप्पणी में सुझाव दिया था, समस्या यह है कि SQL सर्वर WHERE क्लॉज से विधेय को ठीक से नीचे नहीं धकेलता है - उसकी टिप्पणी में लिंक देखें।
मैं एक उपयोगकर्ता परिभाषित तालिका-मूल्यवान फ़ंक्शन बनाने के साथ समाप्त हुआ और दृश्य बनाने के लिए क्रॉस लागू ऑपरेटर के साथ इसका उपयोग करता हूं।
आइए स्वयं समाधान देखें।
उपयोगकर्ता परिभाषित तालिका-मूल्यवान फ़ंक्शन
CREATE FUNCTION [dbo].[TestFunction] (@Id INT)
RETURNS TABLE
AS
RETURN
(
WITH
Hierarchy (Id, ParentId, Data, Depth)
AS(
SELECT Id, ParentId, NULL AS Data, 0 AS Depth FROM Test Where Id = @Id
UNION ALL
SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
FROM Hierarchy h
INNER JOIN Test t ON t.Id = h.ParentId
)
SELECT * FROM Hierarchy
)
देखें
CREATE VIEW [dbo].[TestView]
AS
SELECT t.Id, t.ParentId, f.Data, f.Depth
FROM
Test AS t
CROSS APPLY TestFunction(Id) as f
निरंतर के साथ क्वेरी
SELECT * FROM TestView WHERE Id = 69
पैरामीटर के साथ क्वेरी
DECLARE @Id INT
SELECT @Id = 69
SELECT * FROM TestView WHERE Id = @Id
पैरामीटर के साथ क्वेरी मूल रूप से स्थिरांक के साथ क्वेरी जितनी तेज़ी से निष्पादित होती है।
धन्यवाद मार्टिन और अन्य लोगों के लिए भी!