[英]Executing a stored procedure as a result of merge statement
我在如下所示的存储过程中使用MERGE
语句:
MERGE Sections AS sTarget
USING @Sections AS sSource
ON sTarget.SectionID = sSource.SectionID
WHEN NOT MATCHED THEN
<INSERT STATEMENT>
WHEN MATCHED THEN
UPDATE SET
IsActive = CASE WHEN sSource.IsDeleted = 1 THEN 0 ELSE 1 END;
^
A
其中@Sections
是传递给存储过程的参数。
现在我想执行一个名为spDeleteSection
的存储过程,它接受SectionID
作为参数并(软)删除该部分下的所有分区和细分并返回 0。我想在“A”处执行此过程。
这可以做到吗? 如果有怎么办? 如果无法完成,我应该在哪里执行以获得相同的结果?
笔记 :
@Sections
是用户定义的表SectionID
从sSource.SectionID
获得您可以使用OUTPUT
子句将每个合并的行捕获到表变量中。
然后只需将该表加入DELETE
即可。
不要试图在这个表变量上逐行执行某些操作,它可能会很慢。 执行单个连接删除。
DECLARE @output TABLE (SectionID int PRIMARY KEY, action nvarchar(10))
MERGE Sections AS sTarget
USING @Sections AS sSource
ON sTarget.SectionID = sSource.SectionID
WHEN NOT MATCHED THEN
<INSERT STATEMENT>
WHEN MATCHED THEN
UPDATE SET
IsActive = CASE WHEN sSource.IsDeleted = 1 THEN 0 ELSE 1 END
OUTPUT sTarget.SectionID, $action
INTO @output (SectionID, action);
;
DELETE d
FROM Division d
JOIN @output o ON o.SectionID = d.SectionID
WHERE o.action = 'UPDATE';
如有必要,您可以将此表变量中的正确行转储到表值参数中,并使用该参数执行单独的过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.