Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Korzystasz z 3 aktualizacji w tej samej procedurze sklepu? Mały błąd

Zaczynasz SP z ;WITH RatingLines ... który łączy się z pierwszą UPDATE oświadczenie, a nie inne. Ta konstrukcja tworzy CTE, który jest widoczny tylko dla pierwszej instrukcji następującej po niej. Więcej wyjaśnień można znaleźć w TN dla Z common_table_expression (Transact-SQL) . W szczególności ten fragment z Uwagi podkreśla to:

Aby ta tabela była znana dla wszystkich instrukcji w twoim SP, utwórz zmienną tabeli lub tabelę tymczasową dla RatingLines zamiast.

Kontur za pomocą tabeli tymczasowej wyglądałby następująco:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL z NOT LIKE IN

  2. Jak zwrócić typy danych SQL z mojego zapytania?

  3. Zrozumienie rozmiaru pamięci „datetimeoffset” w SQL Server

  4. Algorytm pozwalający uniknąć wstrzykiwania SQL na MSSQL Server z kodu C#?

  5. Jak dodać puste wiersze, gdy wybierz zapytanie sql