目前在 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)
是的。只需删除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)
| 归档时间: |
|
| 查看次数: |
2461 次 |
| 最近记录: |