如何解决删除两个物理表,然后使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。