Optimering af Stored Procedure
Hej Eksperter,Jeg har ikke meget forstand på SP's, men har alligevel fået fedtet mig frem til en. Kort fortalt genererer den en ny tabel (tblPageRecursiveList) på baggrund af en eksisterende (viewPage).
Som navnet siger, laver SP'en rekursive kald på viewPage, og gemmer så resultatet i tblPageRecursiveList.
SP'en:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[stpPageRecursion] (
@RootID int,
@RootID_Org int
)
AS
IF @RootID = @RootID_Org
BEGIN
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'tblPageRecursionList')
BEGIN
DROP TABLE tblPageRecursionList
END
CREATE TABLE tblPageRecursionList (PageID int, PageRefID int, PageLevel int, PageTitle nvarchar(100), PageVisible int)
END
BEGIN
SET NOCOUNT ON
DECLARE @PageID int, @PageTitle varchar(100), @PageRefID int, @PageLevel int, @PageVisible int
SET @PageTitle = (SELECT PageTitle FROM dbo.viewPage WHERE PageID = @RootID)
SET @PageRefID = (SELECT PageRefID FROM dbo.viewPage WHERE PageID = @RootID)
SET @PageID = (SELECT PageID FROM dbo.viewPage WHERE PageID = @RootID)
SET @PageVisible = (SELECT PageVisible FROM dbo.viewPage WHERE PageID = @RootID)
SET @PageLevel = @@NESTLEVEL
INSERT INTO tblPageRecursionList (PageID, PageRefID, PageLevel, PageTitle, PageVisible)
VALUES (@PageID, @PageRefID, @PageLevel, @PageTitle, @PageVisible)
SELECT PageID FROM viewPage WHERE PageID = @RootID ORDER BY PagePriority
SET @PageID = (SELECT MIN(PageID) FROM dbo.viewPage WHERE PageRefID = @RootID)
WHILE @PageID IS NOT NULL
BEGIN
EXEC dbo.stpPageRecursion @PageID, @RootID_Org
SET @PageID = (SELECT MIN(PageID) FROM dbo.viewPage WHERE PageRefID = @RootID AND PageID > @PageID)
END
END
Mine 2 problemstillinger er:
1. Optimering
2. Sortering af rekursivt kald
1. Jeg er grøn i SP's, og det kan derfor være, at den kan optimeres. I så fald hører jeg gerne tips om det. Kan det f.eks. passe, at jeg skal lave en ny SELECT statement for hver værdi jeg skal trække fra samme tabelrække?
2. Fra viewPage trækker jeg p.t. felterne PageID, PageRefID, PageTitle og PageVisible. Det er også det, jeg skal bruge. viewPage indeholder yderligere en værdi - PagePriority, som bestemmer rækkefølgen på elementer på samme niveau. Hvordan får jeg det integreret i SP'en?
Jeg håber, at nogen kan hjælpe, da det er lidt af en haster! :)
Generelle kommentarer er også velkomne!
På forhånd tak!