Você inicia o SP com
;WITH RatingLines ...
que se conecta ao primeiro UPDATE
declaração, não as outras. Essa construção cria um CTE que é visível apenas para a primeira instrução que o segue. Mais explicações podem ser encontradas na TN para WITH common_table_expression (Transact-SQL) . Em particular, este trecho de Observações destaca isso:Para ter esta tabela conhecida por todas as instruções em seu SP, crie uma variável de tabela ou uma tabela temporária para o
RatingLines
em vez de. O esboço usando uma tabela temporária seria o seguinte:
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;