Массовое обновление SQL Server 2008 с использованием хранимой процедуры - PullRequest
1 голос
/ 17 февраля 2011

У меня есть 2 таблицы в БД.каждый со столбцом «Имя» и столбцом «Количество» каждый.

Я хотел бы обновить столбец «Количество» во второй таблице из «Количество в первой таблице», только если столбцы «Имя» равны.

Пример:

Первая таблица:

Количество имен

Джек 25
Майк 44

Количество имен

Джек 23
Майк 9
Дэвид 88

Результат (вторая таблица будет выглядеть так ...)

Количество имен

Джек 25
Майк 44
Дэвид 88

ПРИМЕЧАНИЯ:
1. Обе таблицы огромны.(хотя вторая таблица больше ...)
2. Обновление должно быть максимально быстрым ...
(если есть больше параметров, кроме хранимых процедур, я бы хотел услышать.)
3. «Count» определяется как bigint, а «Name» - как nvarchar (100)
4. поле «Count» в первой таблице всегда больше, чем эквивалент во второй таблице
.

Я думаю, что есть больше опций (кроме хранимых процедур), может быть, с MERGE или TRANSACTION, если это будет самый быстрый способ ...

Спасибо!

1 Ответ

2 голосов
/ 18 февраля 2011

Лучшим способом было бы сохранить простоту

UPDATE Table2
SET Count = t1.Count
FROM Table1
WHERE Table2.Name = Table1.Name 
  AND Table2.Count <> Table1.Count

Если производительность этого запроса неудовлетворительная из-за размера ваших таблиц, лучшим решением было бы раздел таблицы на основе поля имени.Затем запрос может быть запущен из разных потоков одновременно с дополнительным фильтром на основе имени для удовлетворения функции разделения.

Например: (при условии, что name является столбцом varchar (20))

UPDATE Table2
SET Count = t1.Count
FROM Table1
WHERE Table2.Name = Table1.Name 
  AND Table2.Count <> Table1.Count
  AND Table2.Name between cast('Jack' as varchar(20)) 
                      and cast('Mike' as varchar(20))

(приведение к строкам - большая помощь Sql Server в правильном устранении разделов.)

...