删除两个物理表,然后使用SQL

问题描述

我正在执行一个SQL查询,该查询从物理表(标题,行)中删除记录,并使用OUTPUT DELETED.*将这些记录插入2个单独的临时表中。

DELETE FROM [dbo].[PartnerFilteredLines] 
OUTPUT DELETED.*
INTO @PartnerFilteredLines 
WHERE SettingsFileId=@SettingssplitId

DELETE FROM [dbo].[PartnerFilteredHeader] 
OUTPUT DELETED.*
INTO @PartnerFilteredHeader 
WHERE SettingsFileId=@SettingssplitId

两个查询都独立工作。我的要求是以某种方式合并这两个查询,并一次(一次执行)执行删除部分,因为出于开发要求,此查询的计划时间为1秒。因此,有时@PartnerFilteredLines条记录在那里,而@PartnerFilteredHeader不是因为它们是在2次执行中执行的。 有人可以帮助我实现这一目标吗?

谢谢

解决方法

您可以使用事务为表PartnerFilteredHeader保持锁定

CREATE PROCEDURE ...
AS
BEGIN
  BEGIN TRANSACTION

  -- lock table "PartnerFilteredHeader" till end of transaction
  SELECT ...
  FROM PartnerFilteredHeader
  WITH (TABLOCK,HOLDLOCK)

  DELETE FROM [dbo].[PartnerFilteredLines] 
  OUTPUT DELETED.*
  INTO @PartnerFilteredLines 
  WHERE SettingsFileId=@SettingsSplitId
    
  DELETE FROM [dbo].[PartnerFilteredHeader] 
  OUTPUT DELETED.*
  INTO @PartnerFilteredHeader 
  WHERE SettingsFileId=@SettingsSplitId


  -- release lock
  COMMIT TRANSACTION
END