sql >> Base de Datos >  >> RDS >> Sqlserver

¿Usando 3 actualizaciones en el mismo procedimiento de tienda? pequeño error

Comienza el SP con ;WITH RatingLines ... que se conecta a la primera UPDATE declaración, no las otras. Esta construcción crea un CTE que solo es visible para la primera instrucción que le sigue. Puede encontrar más explicaciones en el TN para WITH common_table_expression (Transact-SQL) . En particular, este extracto de Observaciones destaca esto:

Para que esta tabla sea conocida por todas las declaraciones en su SP, cree una variable de tabla o una tabla temporal para RatingLines en cambio.

El esquema usando una tabla temporal sería el siguiente:

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;