Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzi 3 aggiornamenti nella stessa procedura di archiviazione? Piccolo errore

Inizi l'SP con ;WITH RatingLines ... che si collega al primo UPDATE affermazione, non le altre. Questo costrutto crea un CTE visibile solo alla prima istruzione che lo segue. Ulteriori spiegazioni sono disponibili in TN per CON common_table_expression (Transact-SQL) . In particolare questo estratto da Osservazioni mette in evidenza questo:

Per fare in modo che questa tabella sia nota per tutte le istruzioni nel tuo SP, crea una variabile di tabella o una tabella temporanea per le RatingLines invece.

Lo schema che utilizza una tabella temporanea sarebbe il seguente:

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;