sql - 尽管我有“提交交易”声明,但未提交交易
问题描述
我正在使用 SQL Azure 并尝试对大表进行批量条件删除,示例:
DECLARE
@LargestKeyProcessed BIGINT =1,
@NextBatchMax BIGINT,
@msg varchar(max) ='';
WHILE (@LargestKeyProcessed <= 1000000)
BEGIN
Begin Transaction
SET @NextBatchMax = @LargestKeyProcessed + 50000;
DELETE From mytable
WHERE Id > @LargestKeyProcessed AND Id <= @NextBatchMax And some logic
SET @LargestKeyProcessed = @NextBatchMax;
set @msg=''+@LargestKeyProcessed;
RAISERROR(@msg, 0, 1) WITH NOWAIT
Commit Transaction
END
命令成功执行后,我关闭选项卡,但 SSMS 说有未提交的事务,尽管提交语句在每次迭代中。此外,数据库大小似乎保持不变。
我恳请您的支持来解释为什么会发生这种情况
非常感谢
解决方案
我想你可以尝试添加SET IMPLICIT_TRANSACTIONS OFF
到 sql 中。如下,看看是否解决了您的问题。
DECLARE
@LargestKeyProcessed BIGINT =1,
@NextBatchMax BIGINT,
@msg varchar(max) ='';
WHILE (@LargestKeyProcessed <= 1000000)
BEGIN
SET IMPLICIT_TRANSACTIONS OFF
Begin Transaction
SET @NextBatchMax = @LargestKeyProcessed + 50000;
DELETE From mytable
WHERE Id > @LargestKeyProcessed AND Id <= @NextBatchMax And some logic
SET @LargestKeyProcessed = @NextBatchMax;
set @msg=''+@LargestKeyProcessed;
RAISERROR(@msg, 0, 1) WITH NOWAIT
Commit Transaction
END
推荐阅读
- c# - 在运行时保存当前状态
- javascript - 将字符串中的前导或尾随空格移出星号
- regex - Azure CDN 规则引擎删除 .html 扩展名
- c# - NC Link 开启时是否可以执行 SelectMainProgram/SelectScheduleProgram?
- python - 如何使用 pandas 将每个进程从多处理写入单独的 csv 文件?
- qt - 找不到有效的设置文件
- angular - Ionic4 自定义相机视图
- botframework - Bot-framework 机器人创建群聊
- python - 当内部有 NULL 值时如何解析 JSON?
- python-3.x - 尽管按钮当时被禁用,PySimpleGUI 仍会读取按钮事件