我目前在存儲過程中有以下SQL語句;在SQL Server 2008/2012的單個SQL語句中返回子記錄
SELECT [Id],
[Path],
[Title],
[Description]
FROM [Configuration].[Pages] p
WHERE
((p.Id = @Id) OR (@Id IS NULL)) AND
((p.Path = @Path) OR (@Path IS NULL))
這使我可以通過頁面的路徑,頁面的ID或沒有任何東西(返回所有)。
我期待重構這個返回相關的子記錄(1到M),而不是返回數據庫中的每個返回的記錄。子記錄的當前SQL如下所示;
SELECT h.Id, h.Description, h.Title, h.[Content]
FROM [Configuration].[HelpItems] h INNER JOIN
[Configuration].[PageHelpItems] ph ON h.Id = ph.HelpId
WHERE (ph.PageId = @PageId)
目前,我通過每個父記錄的循環和調用此存儲過程的每一個,我相信這是低效的,我想有與保證孩子的SP的一個或多個SQL語句所有家長都會返回記錄。
你期運用哪個RDBMS? SQL Server?哪個版本?樹能夠遞減多少層?你聽說過遞歸CTE嗎? –
SQL Server 2008/2012。只有一個遞歸級別。 – ChrisBint
好的,你提到「我不想重構這個來返回相關的子記錄」,在那裏是「不正確」,你不希望重構? –