У меня есть таблица с 9-миллионной записью Мне нужно прокручивать каждую строку и ее нужно вставлять в несколько таблиц на каждой итерации.MS sql-сервер, проходящий через огромную таблицу
Мой пример запроса
//this is the table with 9 million records
create table tablename
(
ROWID INT IDENTITY(1, 1) primary key ,
LeadID int,
Title varchar(20),
FirstName varchar(50),
MiddleName varchar(20),
Surname varchar(50)
)
declare @counter int
declare @leadid int
Declare @totalcounter int
set @counter = 1
Select @totalcounter = count(id) from tablename
while(@counter < @totalcounter)
begin
select @leadid = leadid from tablename
where ROWID = @counter
--perform some insert into multiple tables
--in each iteration i need to do this as well
select * from [sometable]
inner join tablename where leadid = @leadid
set @counter = @counter + 1
end
Проблема здесь это занимает слишком много времени, особенно объединения на каждой итерации.
Может кто-то, пожалуйста, помогите мне оптимизировать это.
Пожалуйста, объясните, что вы хотите достичь. Почему нет простого соединения? Почему цикл и счетчики? –
В идеале вы выражаете операции в режиме набора и избегаете циклирования вообще. Но в данный момент мы не можем с этим поделать, потому что все, что вы показываете нам, - это код вашей петлевой инфраструктуры. –
Что это за запрос с 'INNER JOIN' для ????? Это имеет смысл только на последней итерации - если ваша хранимая процедура возвращает ее как результат набора – valex