Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando 3 atualizações no mesmo Store Procedure? Pequeno erro


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;