Започвате SP с ;WITH RatingLines ...
който се свързва с първата UPDATE
изявление, а не другите. Тази конструкция създава CTE, който е видим само за първия израз, който го следва. Повече обяснения могат да бъдат намерени в TN за С common_table_expression (Transact-SQL) . По-специално този откъс от Забележки подчертава следното:
За да имате тази таблица известна за всички изрази във вашия SP, създайте таблична променлива или временна таблица за RatingLines
вместо.
Контурът с помощта на временна таблица би бил както следва:
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;