Есть несколько возможностей.Если вам нужно изменить всю таблицу, возможно, будет быстрее создать копию вашей таблицы с вашим изменением, а затем переименовать таблицу (воссоздать все индексы и т. Д., Чтобы сделать объекты одинаковыми).Если необходимо изменить только часть таблицы, вы можете вставить строки, которые вы хотите изменить, в другую таблицу, удалить эти строки из счета-фактуры и затем вставить их обратно в счет-фактуру из временной таблицы.
select col1, col2, SUBSTRING(orderingcustomercode, 2, 7) as orderingcustomercode ... the rest of columns
into [XXXX_DWH].[Dwh].[Invoice_temp]
from [XXXX_DWH].[Dwh].[Invoice]
Только обновлениескажем, 100 000 за один раз также должно быть хорошим вариантом, но если у вас есть миллионы строк в индексе columnstore, первый подход, на мой взгляд, лучше.Пакеты уменьшают журналы транзакций, генерируемые обновлением.Также было бы хорошо разрешить серверу sql выполнять поиск в этом where InvoicingYear='2019' and InvoicingMonth='01'
, т.е. иметь разделение на InvoiceDate.
DECLARE @output INT = 1
while @output > 0
begin
with cte as
(select top 100000 *
from [XXXX_DWH].[Dwh].[Invoice]
where InvoicingYear='2019' and InvoicingMonth='01')
update cte
set OrderingCustomerCode=SUBSTRING(orderingcustomercode,2,7)
SET @output = @@ROWCOUNT
end