使用 SQL 删除两个物理表并插入它们以立即分隔两个临时表
Delete two physical tables and insert those to separate two temp tables at once using SQL
我有一个 SQL 查询,它从物理 table 中删除记录(header,行)并将这些记录插入到 2 个单独的临时 table 使用 OUTPUT DELETED.*
.
DELETE FROM [dbo].[PartnerFilteredLines]
OUTPUT DELETED.*
INTO @PartnerFilteredLines
WHERE SettingsFileId=@SettingsSplitId
DELETE FROM [dbo].[PartnerFilteredHeader]
OUTPUT DELETED.*
INTO @PartnerFilteredHeader
WHERE SettingsFileId=@SettingsSplitId
两个查询都是独立工作的。我的要求是以某种方式合并这 2 个查询并一次执行删除部分(一次执行),因为对于开发要求,此查询计划为 1 秒。因此,有时 @PartnerFilteredLines
条记录存在而 @PartnerFilteredHeader
条记录不存在,因为它们是在 2 次执行中执行的。
有人可以帮我实现这个目标吗?
谢谢
您可以使用事务为 table 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
我有一个 SQL 查询,它从物理 table 中删除记录(header,行)并将这些记录插入到 2 个单独的临时 table 使用 OUTPUT DELETED.*
.
DELETE FROM [dbo].[PartnerFilteredLines]
OUTPUT DELETED.*
INTO @PartnerFilteredLines
WHERE SettingsFileId=@SettingsSplitId
DELETE FROM [dbo].[PartnerFilteredHeader]
OUTPUT DELETED.*
INTO @PartnerFilteredHeader
WHERE SettingsFileId=@SettingsSplitId
两个查询都是独立工作的。我的要求是以某种方式合并这 2 个查询并一次执行删除部分(一次执行),因为对于开发要求,此查询计划为 1 秒。因此,有时 @PartnerFilteredLines
条记录存在而 @PartnerFilteredHeader
条记录不存在,因为它们是在 2 次执行中执行的。
有人可以帮我实现这个目标吗?
谢谢
您可以使用事务为 table 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