Telstra Ответов: 1

Как сделать массовое обновление в SQL server в одном операторе обновления


Привет,
У меня есть почти 1 млн записей, в которых мне нужно обновить название своей компании по каждому идентификатору.
Как я могу обновить его в одном операторе обновления в sql server.
Короче говоря я хотел бы выступить

обновление набора tblname
Name= 'updatedname'(что будет 100s of)
где
CID в
(
100-е годы
)

Спасибо,
Нилеш

Что я уже пробовал:

Делать это один за другим, но так как у него есть 1М записей, это будет очень долго и трудоемко для 1М записей.

ZurdoDev

Вы можете импортировать данные в другую таблицу и иметь соответствующий столбец, а затем присоединиться к нему, чтобы выполнить обновление.

1 Ответов

Рейтинг:
0

CHill60

Я создал несколько фиктивных данных с более чем 1 млн записей

Create table company
(
	Id int identity(1,1),
	[Name] nvarchar(50),
	Address1 nvarchar(50),
	Address2 nvarchar(50),
	Address3 nvarchar(50),
	ZipPostCode nvarchar(20),
	Country nvarchar(50)
	-- and whatever else you need
)
GO
insert into company ([Name]) values ('dummy')
GO 1000
go
INSERT INTO company ([Name]) SELECT [Name] FROM company
go 6

Затем я создал временную таблицу с одной записью для каждой записи в компании, только идентификатор и текущее имя
select Id, [Name] into #temp from Company

Я обновил временную таблицу с новым именем ( именами) - достаточно быстро, так как только 2 столбца, например
update #temp set [Name] = [Name] + cast(Id as varchar)

Для обновления первоначального использования соединения - это быстрее
update A
set [Name] = T.[Name]
FROM company A
INNER JOIN #temp T on A.Id = T.Id
Моему ноутбуку потребовалось около 2 минут, чтобы обработать 1,4 миллиона с небольшим количеством доступной памяти. Я бы ожидал, что наполовину приличный сервер, настроенный на половину этого времени, займет половину этого времени