繁体   English   中英

使用选择语句(具有多个结果)作为存储过程的输入参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM