Atualmente no SQL Server 2008/R2. Acabei de ler aqui que "definir contagem de linhas" está sendo preterido em algumas versões posteriores a 2012: http://technet.microsoft.com/en-us/library/ms188774.aspx
Temos algum código herdado que o usa presumivelmente para excluir pequenos blocos de dados e minimizar o bloqueio em nosso trabalho noturno "Data Purge".
Sem rowcount, eu teria que usar "top xxx"?
set rowcount 1000 /* Only delete this number of rows at a time */;
declare @short_time datetime2 = DATEADD(week,-1,SYSUTCDATETIME());
SET @TotalRowCount = 0
while ( select COUNT(1) from FlightAudit with (nolock) ) > @min_row_count
begin
delete FlightAudit where CreatedUTC < @short_time;
SET @SaveRowCount = @@ROWCOUNT
SET @TotalRowCount = @TotalRowCount + @SaveRowCount
if @SaveRowCount=0 break;
print 'delete from FuelerCertificationAudit...' + convert(varchar(10),@SaveRowCount) + ' Time=' + dbo.DateOrNullToChar(getdate())
end
print 'Total deleted from FlightAudit...' + convert(varchar(10),@TotalRowCount) + ' Time=' + dbo.DateOrNullToChar(getdate())
Sim. Basta remover o
set rowcount
e usarO restante do código pode permanecer inalterado.
Isso exclui 1.000 linhas arbitrárias correspondentes à
WHERE
cláusula (mesma semântica da consulta original).Se você quiser definir um determinado
ORDER BY
para oTOP
então você pode usar