如何替换“设置行数”

Nea*_*ers 4 sql-server t-sql

目前在 SQL Server 2008/R2 上。我刚刚在这里读到“设置行数”在 2012 年发布的某些版本中已被弃用:http : //technet.microsoft.com/en-us/library/ms188774.aspx

我们有一些遗留代码可能使用它来删除小块数据并最大限度地减少我们每晚“数据清除”工作中的锁定。

如果没有行数,我将不得不使用“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()) 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 7

是的。只需删除set rowcount并使用

DELETE TOP (1000) FlightAudit
WHERE  CreatedUTC < @short_time; 
Run Code Online (Sandbox Code Playgroud)

其余代码可以保持不变。

这将删除与WHERE子句匹配的任意 1000 行(与原始查询语义相同)。

如果你想定义一个特定ORDER BY的,TOP那么你可以使用

WITH T
     AS (SELECT TOP (1000) *
         FROM   FlightAudit
         WHERE  CreatedUTC < @short_time
         ORDER  BY CreatedUTC)
DELETE FROM T; 
Run Code Online (Sandbox Code Playgroud)