首页 > 解决方案 > 为什么删除语句会影响附加行?

问题描述

更新

我发现包含实际执行计划是添加额外行影响警告的罪魁祸首。

原始问题:

我正在删除数十万条不必要的记录,每批 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
...
...

此外,在执行计划中,我没有看到对其他表或其他搜索的任何引用。

在此处输入图像描述

谢谢你。

标签: sql-serverjoinsql-execution-plan

解决方案


看起来通过显示执行计划引发了额外的行警告。

我已经删除了“包括实际执行计划”,现在它没有显示任何其他受影响的行。

谢谢你们。


推荐阅读