Вы можете просто удалить rowcount
:
DELETE FROM dbo.setting WITH(ROWLOCK)
WHERE CreateDate < DATEADD(day, -90, GETDATE());
Обратите внимание на это из документации :
Использование SET ROWCOUNT не повлияет на DELETE,Операторы INSERT и UPDATE в будущих версиях SQL Server.Избегайте использования SET ROWCOUNT с операторами DELETE, INSERT и UPDATE в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют его.Для аналогичного поведения используйте синтаксис TOP.Для получения дополнительной информации см. TOP (Transact-SQL).
Причина, по которой код будет написан таким образом, заключается в пакетной обработке delete
s - удаление большого количества записей может занять много времени.
Если вы хотите сохранить пакетные удаления, сделайте что-то вроде:
declare @num_deleted int;
set @num_deleted = 999;
WHILE (@num_deleted > 0)
BEGIN
DELETE todelete
FROM (SELECT TOP (100) s.*
FROM dbo.setting s WITH(ROWLOCK)
WHERE CreateDate < DATEADD(day, -90, GETDATE())
) todelete;
set @num_deleted = @@rowcount;
END;