sql >> Databasteknik >  >> RDS >> Sqlserver

Använder du tre uppdateringar i samma butiksprocedur? Litet fel

Du startar SP med ;WITH RatingLines ... som ansluter till den första UPDATE uttalande, inte de andra. Den här konstruktionen skapar en CTE som bara är synlig för det första påståendet som följer det. Mer förklaring finns i TN för WITH common_table_expression (Transact-SQL) . I synnerhet detta utdrag ur Anmärkningar belyser detta:

För att få denna tabell känd för alla satser i din SP, skapa en tabellvariabel eller en temporär tabell för RatingLines istället.

En disposition med en tillfällig tabell skulle vara följande:

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;



  1. LEFT() vs SUBSTRING() i SQL Server:Vad är skillnaden?

  2. Gör SQL Server-prestanda lätt

  3. Lagrade icke-engelska tecken, fick '?????' - Problem med MySQL-teckenuppsättning

  4. hur man anropar orakelfunktion i mybatis