Vous démarrez le SP avec ;WITH RatingLines ...
qui se connecte au premier UPDATE
déclaration, pas les autres. Cette construction crée un CTE qui n'est visible que par la première instruction qui le suit. Plus d'explications peuvent être trouvées dans le TN pour WITH common_table_expression (Transact-SQL) . En particulier, cet extrait de Remarques met en évidence ceci :
Pour que cette table soit connue pour toutes les instructions de votre SP, créez une variable de table ou une table temporaire pour les RatingLines
Au lieu.
Le plan utilisant une table temporaire serait le suivant :
Select RDA.[CTS] AS [CTS]
,RDA.[B_KEY] AS [B_KEY]
,RDA.[H_KEY] AS [H_KEY]
,RDA.[RT_ID] AS [RT_ID]
,RDA.[RT_AVGRATING] AS [RT_AVGRATING]
,RDDA.[RTD_COMMENT] AS [RTD_COMMENT]
INTO #RatingLines -- Create #RatingLines as temporary table
From [DynNavHRS].[HRSDB].[HTL_RATING_ALL_DA] RDA
Join [DynNavHRS].[HRSDB].[HTL_RATING_DETAIL_ALL_DA] RDDA
ON RDA.RT_ID =RDDA.RT_ID
AND RDDA.[RTD_COMMENT] <> ''
AND RDA.[B_KEY]='19214642';
-- Throughout the rest of the SP, use #RatingLines as your ratings table; eg:
...
INNER JOIN #RatingLines RL1
...
-- At the end of the SP, drop the temporary table
DROP TABLE #RatingLines;