作为下一个版本的一部分,我需要更新数百万行,但这样做会填充事务日志并失败。我有一些想法,但我不是 SQL 专家,所以我确信会有一些我不知道的问题。
相关点:
- 我需要将一个脚本交给运营团队,因此需要一个无需人工干预的 T-SQL 方法。
- 显然,事务日志每 15 分钟被回收一次。
WAITFOR DELAY '00:15:00'
(我考虑过在 catch 块中编写一个带有 try-catch 的循环,如下所示) - (编辑)除了数据我不能修改任何东西。
- (编辑)这是一个简单的更新,将外键列更改为不同的现有键。
谢谢,
菲尔
DECLARE
@AffectedRows int
SET @AffectedRows = 0
WHILE @AffectedRows < @RowsToUpdate
BEGIN
BEGIN TRY
BEGIN TRAN
-- Do some updates
SET @AffectedRows = @AffectedRows + @@RowCount
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
WAITFOR DELAY '00:15:00'
END CATCH
END
PRINT @AffectedRows