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

Aktualizacja dużej liczby wierszy — SQL Server 2005

Czy masz indeksowaną kolumnę tożsamości w tabeli docelowej? To jeden z niewielu przypadków, w których lubię używać pętli WHILE. Głównym problemem z rozwiązaniem w przesłanym linku jest złe użycie indeksu.

    DECLARE @START INT, @FINISH INT, @LOOPEND INT
    SELECT @START = 1, @FINISH = 5000, @LOOPEND = MAX(ID)
    from Bla 

    WHILE @START <= @LOOPEND
    BEGIN
        update a
        set XML = b.xml
        from Bla as a
        inner join #temp as b on a.i = b.i
        WHERE a.ID BETWEEN @START AND @FINISH

        SET @START = @FINISH + 1
        SET @FINISH = @FINISH + 5000
    END

W przypadkach, w których masz klucz zastępczy (kolumna tożsamości jako klucz podstawowy), co nie jest tak rzadkie, spowodowałoby to proste wyszukiwanie indeksu na kluczu podstawowym i można je regulować po prostu o wielkość wzrostu (w przykładzie 5000)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Udziel uprawnień do procedury składowanej

  2. Jak rzutować zmienne w T-SQL do zbiorczego wstawiania?

  3. Złożona relacja klucza podstawowego sql

  4. Wydajność serwera połączonego SQL Server

  5. Jak odwołać się do jednego CTE dwukrotnie?