[英]Using a select Statement (with multiple results) as an input parameter for Stored Procedure
我有两张桌子。 情节和评估。 每个情节都由多个评估组成。
SQL Server 2005。
我有一个功能齐全的DeleteAssessment存储过程,该过程接受AssessmentID作为输入参数并删除它。 我正在尝试设置一个DeleteEpisode评估,该评估在删除情节之前会调用DeleteAssessment存储过程来删除所有相关评估。 我相信这段代码进一步说明了我想做什么。
EXEC DeleteAssessment (SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID)
select语句作为参数将返回多个评估ID,然后我需要将其传递给DeleteAssessment存储过程。
我会以错误的方式处理吗? 有什么我想念的吗?
如果使用的是SQL Server 2008,则正确的方法是使用TVP将相关表作为参数传递。
是的,那是行不通的。 如果DeleteAssessment非常复杂,以至于您不能仅仅删除与情节相关的评估,则需要在DeleteEpisode中执行以下操作:
DECLARE @AssessmentID INT;
CREATE TABLE #AssessmentIDs (AssessmentID INT);
INSERT #AssessmentIDs (AssessmentID)
SELECT AssessmentID FROM Assessments WHERE EpisodeID = @EpisodeID;
WHILE (SELECT COUNT(*) FROM #AssessmentIDs WHERE AssesmnentID = @AssessmentID) > 0
BEGIN
SELECT @AssessmentID = TOP 1 AssessmentID FROM #AssessmentIDs
EXEC DeleteAssessment @AssessmentID
DELETE #AssessmentIDs WHERE AssessmentID = @AssessmentID
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.