Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализирайте голям брой редове - SQL Server 2005

Имате ли индексирана колона за самоличност в целевата таблица? Това е един от малкото случаи, в които наистина обичам да използвам WHILE цикъл. Основният проблем с решението във връзката, която сте публикували, е лошото използване на индекса.

    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

В случаите, когато имате сурогатен ключ (колона за самоличност като първичен ключ), което не е толкова необичайно, това ще доведе до просто търсене на индекс на първичния ключ и може да се регулира просто чрез сумата на растеж (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. Разделянето води до текуща заявка за общи суми

  2. Подзаявката върна повече от 1 стойност. (Вмъкване в рамките на цикъла while)

  3. Вмъкнете N произволни стойности в таблицата

  4. Грешка на SQL Server:Не може да се изпълни отдалечена процедура

  5. Размер на типа данни на променлива в sql