我需要在下一个版本中更新数百万行,但这样做会填充事务日志并失败。我有一些想法,但我不是SQL专家所以我确信会有一些我不知道的问题。
相关要点:
WAITFOR DELAY '00:15:00'
编写一个带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
答案 0 :(得分:2)
最后,我编写的例子效果最好;一个事务日志完整错误被捕获,并且15分钟足以让日志被回收。
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
答案 1 :(得分:1)
一些观点/想法:
答案 2 :(得分:0)
你正在重新发明蚕食删除/更新:)
看看这种方法,你可以做比单行更大的块:
http://www.sqlservervideos.com/video/nibbling-deletes/
http://sqladvice.com/blogs/repeatableread/archive/2005/09/20/12795.aspx