Что вы можете сделать сейчас?
Вы можете попробовать выполнить отдельный запрос, используя табличную подсказку WITH (NOLOCK) , чтобы увидеть, сколько строк было обновлено.
например если оператор обновления:
UPDATE MyTable
SET MyField = 'UPDATEDVALUE'
WHERE ID BETWEEN 1 AND 10000000
Вы можете запустить это:
SELECT COUNT(*)
FROM MyTable WITH (NOLOCK)
WHERE ID BETWEEN 1 AND 10000000
AND MyField = 'UPDATEDVALUE'
Что вы можете сделать в будущем?
Вы можете выполнить обновление в пакетном режиме и выводить прогресс по мере его поступления. например используйте цикл для обновления записей, скажем, 1000 (произвольное значение для объяснения). После завершения каждого блока обновления распечатайте ход выполнения (при условии, что вы запускаете его из SSMS), например,
DECLARE @RowCount INTEGER
SET @RowCount = 1
DECLARE @Message VARCHAR(500)
DECLARE @TotalRowsUpdated INTEGER
SET @TotalRowsUpdated = 0
WHILE (@RowCount > 0)
BEGIN
UPDATE TOP (1000) MyTable
SET MyField = 'UPDATEDVALUE'
WHERE ID BETWEEN 1 AND 10000000
AND MyField <> 'UPDATEDVALUE'
SELECT @RowCount = @@ROWCOUNT
SET @TotalRowsUpdated = @TotalRowsUpdated + @RowCount
SELECT @Message = CAST(GETDATE() AS VARCHAR) + ' : ' + CAST(@TotalRowsUpdated AS VARCHAR) + ' records updated in total'
RAISERROR (@Message, 0, 1) WITH NOWAIT
END
Использование RAISERROR таким образом обеспечивает немедленную распечатку сообщений о ходе выполнения. Если вместо этого вы использовали PRINT, сообщения помещаются в буфер и не выводятся сразу, поэтому вы не сможете увидеть прогресс в реальном времени.