我运行以下代码来清除旧数据。确切的代码as is
作为指向用户数据库的 SQL 代理作业步骤运行。期望提交一批 10,000 行。2 天前它没有这样做,在终止会话后(终止原因与此问题无关)回滚所有删除,而不仅仅是最后一批。
任何人都可以指出我的原因吗?
SET NOCOUNT ON;
DECLARE @rowCount INT;
SET @rowCount= 1;
WHILE @rowCount > 0
BEGIN
BEGIN TRANSACTION;
DELETE TOP (10000)
dbo.TableName
WHERE RecordedAt<DATEADD(month, -3, GETDATE() )
SET @rowCount = @@ROWCOUNT;
COMMIT TRANSACTION;
END
很难根据提供的信息做出明确诊断,但可能的原因是无意中调用了已打开事务的批处理。我建议采取以下一项或多项措施来防止问题继续发生:
添加
SET XACT_ABORT ON;
到批处理以帮助确保自动回滚显式事务。删除多余的
BEGIN TRAN
,COMMIT
因为如果发生错误,自动单语句事务将完全回滚删除批处理。添加错误处理