Sql-Server
T-SQL 的 RowNum(不是 TOP #)
試圖執行更新,但我想逐步完成它,因為它是相當多的數據,不想一下子全部爆炸。
在 oracle 中選擇我想要的行要容易一些,因為您可以將其包含在
WHERE
子句中,但 T-SQL 您將其包含在select
. 我想按照以下方式寫一些東西:Update Instances set thing = 'new thing' Where rownum<500
基本上想一次做500個,這種語法在TSQL中可以嗎?
您可以使用
SET ROWCOUNT xxx
來限制受更新語句影響的行數。像這樣的東西:
SET ROWCOUNT 500; WHILE EXISTS (SELECT 1 FROM Instances WHERE thing = 'new thing') BEGIN BEGIN TRANSACTION; UPDATE Instances SET thing = 'new thing' WHERE thing <> 'new thing'; COMMIT TRANSACTION; CHECKPOINT; WAITFOR DELAY '00:00:01'; --wait one second between loops END
如果您的數據庫配置為簡單恢復模式,這將不需要大量的日誌空間。但是,如果您的數據庫處於完全恢復模式,您可能希望在此過程中定期進行日誌備份。
Microsoft Docs建議
SET ROWCOUNT
它是一個已棄用的設置:使用 SET ROWCOUNT 不會影響 SQL Server 未來版本中的 DELETE、INSERT 和 UPDATE 語句。避免在新的開發工作中將 SET ROWCOUNT 與 DELETE、INSERT 和 UPDATE 語句一起使用,併計劃修改目前使用它的應用程序。對於類似的行為,請使用 TOP 語法。
話雖如此,目前它不在已刪除功能的列表中。