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

Zaktualizuj oświadczenie dla wielu identyfikatorów

Dzieje się tak, ponieważ próbujesz ustawić column3 do zwróconego wyniku, a SQL oczekuje, że będzie to tylko jedna wartość (skalarna). Silnik SQL jest zdezorientowany, gdy przekazujesz mu więcej niż jedną zwracaną wartość (której powinien użyć?...nie zakłada iteracji wyników). Tak więc, jeśli chcesz zaktualizować cały zestaw wyników, musisz utworzyć podtabelę z zapytania i dołączyć do niej. Twoje zapytanie powinno wyglądać mniej więcej tak

UPDATE Table3
SET Column3 = subtable.value
FROM Table3 
    JOIN (
        select t2.column3+t1.column3 as value, t1.id
        from table2 t2 with (nolock) join table1 t1
        on table2.id=t1.id
        where table2.id IN (100,101)
    ) AS subtable
    ON subtable.id = Table3.id
WHERE table3.id IN (100, 101)

Przy założeniu, że table3.id pasuje do innych identyfikatorów, naprawdę nie potrzebujesz również wewnętrznego where table2.id IN ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przywrócić kopię zapasową pod inną nazwą

  2. Jak mogę skorzystać z pliku .db w programie SQL Server 2008?

  3. Jak wykonać procedurę składowaną z Laravel?

  4. Ukrywanie tabeli w bazie danych SQL Server?

  5. Najbardziej wydajna metoda wykrywania zmian kolumn w MS SQL Server