【发布时间】:2019-04-23 18:09:03
【问题描述】:
更新:
我发现包含实际执行计划是添加额外行影响警告的罪魁祸首。
原始问题:
我正在删除几十万条不必要的记录,每批 100 条记录。
我的问题是,在每 100 行删除指令后,我看到一个警告(1 行受影响),我想知道它可能是什么。
我的表没有任何触发器,也没有与级联的关系。那么,您是否知道其他可能会影响其他行的内容?
DECLARE @LOOP bit = 1
WHILE @LOOP = 1
BEGIN
BEGIN TRANSACTION
DELETE TOP (100) FICHERO_ASIGNACION
FROM FICHERO_ASIGNACION
INNER JOIN FICHERO ON FICHERO.FIC_KEY = FICHERO_ASIGNACION.FIC_KEY
WHERE FAT_KEY = 4 and
CLI_COD is null and
FIC_BUC = 'prd.factura-venta'
PRINT '100 unneeded assignments deleted'
IF @@ROWCOUNT = 0 SET @LOOP = 0
COMMIT TRANSACTION
END
这是结果:
(100 rows affected)
(1 row affected)
100 unneeded assignments deleted
(100 rows affected)
(1 row affected)
100 unneeded assignments deleted
(100 rows affected)
(1 row affected)
100 unneeded assignments deleted
...
...
此外,在执行计划中,我没有看到对其他表或其他搜索的任何引用。
谢谢。
【问题讨论】:
-
我知道你说过没有触发器,但请仔细检查。此外,您的循环不应该循环 -
print将重置@@ROWCOUNT为 0,无论有多少行受到DELETE的影响。 -
达米安,我想这就是答案......
-
还要检查其他表中是否存在级联删除关系。
-
@AbdulRasheed - 级联删除不会报告级联表中的行数,除非我严重记错了。
标签: sql-server join sql-execution-plan