尝试运行更新,但我想逐步完成它,因为它的数据量很大,不想一次将其全部炸毁。
在 oracle 中,选择我想要的行要容易一些,因为你可以将它包含在WHERE
子句中,但 T-SQL 你将它包含在select
. 我想按照以下方式写一些东西:
Update Instances
set thing = 'new thing'
Where rownum<500
基本上一次想做500个,这个语法在TSQL中可行吗?
尝试运行更新,但我想逐步完成它,因为它的数据量很大,不想一次将其全部炸毁。
在 oracle 中,选择我想要的行要容易一些,因为你可以将它包含在WHERE
子句中,但 T-SQL 你将它包含在select
. 我想按照以下方式写一些东西:
Update Instances
set thing = 'new thing'
Where rownum<500
基本上一次想做500个,这个语法在TSQL中可行吗?
看看关于它的MS Docs:
或者
或者您可以直接更新派生表而无需连接:
可以在dbfiddle找到这种方法的示例。
您可以使用
SET ROWCOUNT xxx
来限制受更新语句影响的行数。是这样的:
如果您的数据库配置为简单恢复模式,则不需要大量日志空间。但是,如果您的数据库处于完全恢复模式,您可能希望在此期间定期进行日志备份。
Microsoft Docs建议
SET ROWCOUNT
这是一个已弃用的设置:话虽如此,它目前不在已删除功能列表中。
现在我再看一眼,看起来这个问题已经得到了回答。
如何更新 SQL Server 中的前 100 条记录?
我错过的关键部分是 500 需要括号。
您可以使用带有 ROW_NUMBER 的公用表表达式,
ORDER BY (SELECT NULL)
表示您不关心实际顺序。