删除两个物理表并插入它们,以便使用SQL同时分隔两个临时表
我有一个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
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查询来锁定第二个表。这意味着你需要使用我在回答中提到的一切