Du startest den SP mit ;WITH RatingLines ...
die an das erste UPDATE
anschließt Aussage, nicht die anderen. Dieses Konstrukt erstellt einen CTE, der nur für die erste darauf folgende Anweisung sichtbar ist. Weitere Erläuterungen finden Sie im TN für WITH common_table_expression (Transact-SQL) . Insbesondere dieser Auszug aus den Bemerkungen hebt dies hervor:
Damit diese Tabelle für alle Aussagen in Ihrem SP bekannt ist, erstellen Sie eine Tabellenvariable oder eine temporäre Tabelle für die RatingLines
stattdessen.
Die Gliederung mit einer temporären Tabelle würde wie folgt aussehen:
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;