我目前正在研究优化我们的一些存储过程的领域,并且我在性能分析中遇到过,存储过程中的一段 SQL 表现非常糟糕。我已经做了一些研究,并且我已经读到当你没有唯一记录时使用 with 子句是不可以的,所以我想重写它,但我遇到了麻烦。我认为 while 循环可能是我最好的选择,以实现我所追求的结果,但我无法正确填充数据的层次结构(特别是 [level] 字段)。这是我要重写的 SQL 块。任何建议/想法将不胜感激。
;WITH RuleChart (
RuleID,
RuleDetailID,
RuleUnitGroupID,
ParentRuleUnitGroupID,
[Level],
IsNextRuleUnitGroupAvailable
) AS (
SELECT
DISTINCT RD.RuleID,
RD.RuleDetailID,
RD.RuleUnitGroupID,
RD.ParentRuleUnitGroupID,
0 AS [Level],
RD.IsNextRuleUnitGroupAvailable
FROM #TtblRuleDetail RD
WHERE
RD.RuleID IN (
SELECT RuleID
FROM #TtblRule
WHERE ResultID IN (
SELECT ResultID
FROM #TtblResultUnit
)
)
AND RD.ParentRuleUnitGroupID IS NULL
UNION ALL
SELECT
RD.RuleID,
RD.RuleDetailID,
RD.RuleUnitGroupID,
RD.ParentRuleUnitGroupID,
[Level] + 1,
RD.IsNextRuleUnitGroupAvailable
FROM
#TtblRuleDetail RD
INNER JOIN RuleChart RC
ON
RD.ParentRuleUnitGroupID = RC.RuleUnitGroupID
AND RD.RuleID=RC.RuleID
)