У нас есть несколько таблиц с более чем 300 000 записями, и для записи необходимо переписать/скопировать записи из одной таблицы в другую. Существует ли более эффективный эффективный способ, чем использование курсоров и копирование каждой записи по одному из одной таблицы в другую, при работе с большими объемами данных?Более эффективный способ копирования больших данных из одного стола в другой
Код:
open SOMETBL
fetch SOMETBL into @key1,@key2,@key3,@key4
while(@@fetch_status = 0)
begin
SELECT @key1InMapping = count(*) FROM SOMEOTHERDB.dbo.tblSOMETBLping WHERE fldEServicesKey = @key1
SELECT @eServiceTypeKey = fldAServiceTypeKey FROM SOMEOTHERDB.dbo.tblAServiceType WHERE fldAServiceTypeNumber = @key4
if (@eServiceTypeKey=null or @eServiceTypeKey=0)
set @eServiceTypeKey = 50
if @key1InMapping>0
begin
update SOMEOTHERDB.dbo.tblSOMETBLping set [email protected] where fldEServicesKey= @key1
-- print 'post='+convert(varchar,@key2) + ' :key1='+convert(varchar,@key1)+ ' :serviceTypeKey='+convert(varchar,@eServiceTypeKey)+' : serviceTypeNum='+convert(varchar,@key4)
end
fetch SOMETBL into @key1,@key2,@key3,@key4
end
close SOMETBL
Это курсоры, которые занимают это несколько часов. Прямой запрос SQL займет от нескольких секунд до нескольких минут, чтобы скопировать всего 300 000 строк. – HardCode
Передача данных происходит в одной базе данных или вы перемещаете данные между базами данных? –
@Declan_K это происходит в одной базе данных. –