删除两个物理表并插入它们,以便使用SQL同时分隔两个临时表

删除两个物理表并插入它们,以便使用SQL同时分隔两个临时表,sql,sql-server,ssms,sql-delete,Sql,Sql Server,Ssms,Sql Delete,我有一个SQL查询,它从一个物理表(标题、行)中删除记录,并使用OUTPUT DELETED.*将这些记录插入到一个2个单独的临时表中 DELETE FROM [dbo].[PartnerFilteredLines] OUTPUT DELETED.* INTO @PartnerFilteredLines WHERE SettingsFileId=@SettingsSplitId DELETE FROM [dbo].[PartnerFilteredHeader] OUTPUT DELETE

我有一个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
记录不存在,因为它们是在两次执行中执行的。 有人能帮我做到这一点吗


谢谢

您可以使用事务来锁定表
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

也许你想要一个级联删除外键。嗨@DervişKayımbaşıoğlu谢谢你的回答。有一件事,我需要这样做吗?在我的查询中使用(TABLOCK,HOLDLOCK)来锁定事务。因为我在查询中要做的第一件事是删除和插入到临时表的两个部分。删除语句不需要它。刚才我在select上使用了锁定第二个表,这样当您在第一个表@DervişKayımbaşıoğlu上删除时,它就不会有任何更改了。我只需要在DELETE查询前后使用BEGIN TRANSACTION和COMMIT TRANSACTION关键字,对吗?您还需要使用select查询来锁定第二个表。这意味着你需要使用我在回答中提到的一切