Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden von 3 Updates in derselben Store-Prozedur? Kleiner Fehler

Du startest den SP mit ;WITH RatingLines ... die an das erste UPDATE anschließt Aussage, nicht die anderen. Dieses Konstrukt erstellt einen CTE, der nur für die erste darauf folgende Anweisung sichtbar ist. Weitere Erläuterungen finden Sie im TN für WITH common_table_expression (Transact-SQL) . Insbesondere dieser Auszug aus den Bemerkungen hebt dies hervor:

Damit diese Tabelle für alle Aussagen in Ihrem SP bekannt ist, erstellen Sie eine Tabellenvariable oder eine temporäre Tabelle für die RatingLines stattdessen.

Die Gliederung mit einer temporären Tabelle würde wie folgt aussehen:

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;