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

Prosta instrukcja aktualizacji, dzięki której wszystkie wiersze mają przypisaną inną wartość

Na jakimś stole testowym mój pierwotny plan wygląda następująco.

Po prostu oblicza wynik raz i buforuje go w sppol, a następnie odtwarza ten wynik. Możesz spróbować wykonać następujące czynności, aby SQL Server widział podzapytanie jako skorelowane i wymagające ponownej oceny dla każdego zewnętrznego wiersza.

UPDATE table1
SET    table2Id = (SELECT TOP 1 table2Id
                   FROM   table2
                   ORDER  BY Newid(),
                             table1.table1Id)

Dla mnie to daje ten plan bez szpuli.

Ważne jest, aby korelować z unikalnym polem z table1 jednak tak, że nawet jeśli szpula zostanie dodana, zawsze musi być odbita, a nie przewijana (odtwarzając ostatni wynik), ponieważ wartość korelacji będzie inna dla każdego wiersza.

Jeśli tabele sąduże będzie to powolne ponieważ wymagana praca jest iloczynem dwóch wierszy tabeli (dla każdego wiersza w table1 musi wykonać pełne skanowanie table2 )



  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 pobrać n-tą najwyższą pensję z tabeli bez używania TOP i podzapytania?

  2. Czy możemy zainstalować edycję Express i edycję Standard SQL Server na tym samym komputerze użytkownika?

  3. Funkcje a procedury składowane

  4. SQL Server:Jak sprawdzić, czy ciąg ma tylko cyfry?

  5. Jak zaktualizować wartość atrybutu xml w zmiennej xml za pomocą t-sql?